レガシーコードからの脱却

レガシーな職場でも独学でどうにか頑張っていくブログです。

【お勉強記録】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)