예제 #1
0
    /// <summary>
    /// 基本的なデリゲート
    /// </summary>
    public void Example01()
    {
        DelegateVariable01 v = Method01; // デリゲートにメソッドを「代入」する

        v.Invoke(1, "a");                // デリゲートに代入したメソッドを呼び出す
        v += Method02;                   // デリゲートにメソッドを「追加」する
        v.Invoke(2, "b");                // デリゲートに追加されているメソッド(2つ)を呼び出す
        // v = Method03;    // パラメータが合わない時はデリゲートにメソッドを追加できない
        v -= Method02;                   // デリゲートからメソッドを削除する
        v.Invoke(3, "c");                // デリゲートに入っているメソッド(1つ)を呼び出す
    }
예제 #2
0
    /// <summary>
    /// パラメータに関数を渡す方法、delegate を使った匿名メソッド、ラムダ式を使った匿名メソッド
    /// </summary>
    public void Example02()
    {
        DelegateExecutor(Method01); // こういう呼び出し方もできる。
        // ↑この呼び出し方は「DelegateExecutor 内の処理をした後に、Method01 を実行する」の様に
        //「●●の後に××を実行する」ために使われることが多く、このようなやり方を「コールバック (callback) 」と言う。

        // 匿名メソッドを渡すこともできる
        DelegateExecutor(delegate(int i, string s)
        {
            Debug.Log($"匿名メソッドが呼ばれました。{i.ToString()}, {s}");
        });

        // 匿名メソッドをラムダ式で書くこともできる
        DelegateExecutor((i, s) => Debug.Log($"ラムダ式で定義した匿名メソッドが呼ばれました。 {i.ToString()}, {s}"));

        // ラムダ式と言えば、このような書き方もできる
        DelegateVariable01 v = new DelegateVariable01((i, s) => Debug.Log($"ラムダ式で定義した匿名メソッドが呼ばれました。 {i.ToString()}, {s}"));

        v.Invoke(4, "d");
    }