c#の引数について


[Chapter 6 - Create the MicrophoneManager class | Microsoft
Docs](https://docs.microsoft.com/en-us/windows/mixed-reality/mr-
azure-301#chapter-6--create-the-microphonemanager-class)

上記ドキュメントを参考にしているのですが、以下のコードの  
`private void DictationRecognizer_DictationResult(string text, ConfidenceLevel
confidence)` について質問です。  
この関数はなぜ `StartCapturingAudio()やStopCapturingAudio()`
中で引数無しで使用できているのでしょうか。よろしくお願いいたします。

[code]

    using UnityEngine;
    using UnityEngine.Windows.Speech;
    
    public class MicrophoneManager : MonoBehaviour {
    
        // Help to access instance of this object 
        public static MicrophoneManager instance;
    
        // AudioSource component, provides access to mic 
        private AudioSource audioSource;
    
        // Flag indicating mic detection 
        private bool microphoneDetected;
    
        // Component converting speech to text 
        private DictationRecognizer dictationRecognizer;
    
        private void Awake()
        {
            // Set this class to behave similar to singleton 
            instance = this;
        }
    
        void Start()
        {
            //Use Unity Microphone class to detect devices and setup AudioSource 
            if (Microphone.devices.Length > 0)
            {
                Results.instance.SetMicrophoneStatus("Initialising...");
                audioSource = GetComponent<AudioSource>();
                microphoneDetected = true;
            }
            else
            {
                Results.instance.SetMicrophoneStatus("No Microphone detected");
            }
        }
    
        /// <summary> 
        /// Start microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StartCapturingAudio()
        {
            if (microphoneDetected)
            {
                // Start dictation 
                dictationRecognizer = new DictationRecognizer();
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                dictationRecognizer.Start();
    
                // Update UI with mic status 
                Results.instance.SetMicrophoneStatus("Capturing...");
            }
        }
    
        /// <summary> 
        /// Stop microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StopCapturingAudio()
        {
            Results.instance.SetMicrophoneStatus("Mic sleeping");
            Microphone.End(null);
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
            dictationRecognizer.Dispose();
        }
    
        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// Debugging message is delivered to the Results class.
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Results.instance.SetDictationResult(text);
    
            // Start the coroutine that process the dictation through Azure 
            StartCoroutine(Translator.instance.TranslateWithUnityNetworking(text));
        }
    }
    
[/code]




左辺値
[`dictationRecognizer.DictationResult`](https://docs.unity3d.com/ja/current/ScriptReference/Windows.Speech.DictationRecognizer.DictationResult.html)
は[イベント](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-
guide/events/)です。関数を使用しているのではなく、後で呼び出してもらうよう登録しているだけです。  
そして[プログラムでイベントをサブスクライブするには](https://docs.microsoft.com/ja-
jp/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-
from-events#to-subscribe-to-events-programmatically)で説明されているように従来から使用可能な書式

[code]

    dictationRecognizer.DictationResult += new DictationRecognizer.DictationResultDelegate(DictationRecognizer_DictationResult);
    
[/code]

に対してC# 2.0以降で使用できる簡略化された書式

[code]

    dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
    
[/code]

が使われています。ソースコードを読む際、コード上は後者となっていますが本質的には前者であることを留意する必要があります。

