【お勉強記録】C#文法学び直し。マルチキャストデリゲート
マルチキャストデリゲート
デリゲートオブジェクトは複数のメソッドを管理することも可能で、それをマルチキャストデリゲートと呼ぶそうです。
using System; namespace test { class Program { delegate void Greet(); static void Main(string[] args) { //インスタンス生成 Morning morning = new Morning(); Noon noon = new Noon(); Evening evening = new Evening(); //マルチキャストデリゲート Greet greet = new Greet(morning.SayGoodMorning); greet += new Greet(noon.SayHello); //暗黙変換 greet += evening.SayGoodEvening; greet(); Console.ReadLine(); } } class Morning { public void SayGoodMorning() { Console.WriteLine("Good Morning!"); } } class Noon { public void SayHello() { Console.WriteLine("Hello!"); } } class Evening { public void SayGoodEvening() { Console.WriteLine("Good Evening!"); } } }
実行結果を見ると「おはよう」から「こんばんは」まで順(シーケンシャル)に実行メソッドが呼び出されているのがわかります。
Good Morning! Hello! Good Evening!
「+=」で追加しています。ちなみに削除は「-=」でできます。
で、このマルチキャストデリゲートがどのようなところで使われているかなのですが、 イベントの通知など、複数のイベントハンドラに通知する必要がある際や、コールバックのような動きを実現できます。 (『Effective C#4.0』第3章 項目24 P.133)