メソッドの追加と削除

移譲先リストに複数のメソッドを「追加/削除」します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. デリゲートに登録するメソッドの数は一個だけとは限りません。
    デリゲートにメソッドを追加する方法と削除する方法を説明します。
    イベントに複数のハンドラを割り当てるプログラムは 複数のメソッドを割り当てる を参照して下さい。
    Delegate の基礎は Delegate の基礎 を参照して下さい。
    /*************************************************/
    /*★ 複数のメソッドを「追加/削除」    前田 稔 ★*/
    /*************************************************/
    using System;
    
    namespace ConsoleApp
    {
        delegate void TestDelegate();
        class Class2
        {
            private string name;
            public Class2( string name )
            {
                this.name = name;
            }
            public void method()
            {
                Console.WriteLine(name);
            }
        }
        class Class1
        {
            static void Main(string[] args)
            {
                TestDelegate testdelegates = new TestDelegate( new Class2("test1").method );
                TestDelegate test2 = new TestDelegate( new Class2("test2").method );
                testdelegates += test2;
                testdelegates += new TestDelegate(new Class2("test3").method);
                testdelegates += new TestDelegate(new Class2("test4").method);
                testdelegates();
                testdelegates -= test2;
                testdelegates();
                Console.ReadLine();
            }
        }
    }
    
  2. Class2 はデリゲートに登録されて実行されるクラスです。
    コンストラクタで受け取った name を private string name に保存します。
    method() で private string name を印字します。
        class Class2
        {
            private string name;
            public Class2( string name )
            {
                this.name = name;
            }
            public void method()
            {
                Console.WriteLine(name);
            }
        }
        
  3. デリゲート testdelegates と test2 を new Class2(文字列).method をパラメータとして生成します。
    testdelegates に test2 を追加登録します。
    test2 のようにデリゲートに格納してから追加しなくても、直接追加することも出来ます。
    "test3" と "test4" を直接生成して testdelegates に追加してみました。
    testdelegates() を実行すると "test1", "test2", "test3", "test4" が表示されます。
    testdelegates -= test2; で "test2" を削除して、再び testdelegates() を実行します。
    デリゲートの登録は「+=」で、削除は「-=」で行います。
        TestDelegate testdelegates = new TestDelegate( new Class2("test1").method );
        TestDelegate test2 = new TestDelegate( new Class2("test2").method );
        testdelegates += test2;
        testdelegates += new TestDelegate(new Class2("test3").method);
        testdelegates += new TestDelegate(new Class2("test4").method);
        testdelegates();
        testdelegates -= test2;
        testdelegates();
        

超初心者のプログラム入門(C# Frame Work)