/// <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つ)を呼び出す }
/// <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"); }