次の方法で共有


デリゲートを結合する方法 (マルチキャスト デリゲート) (C# プログラミング ガイド)

この例では、マルチキャスト デリゲートを作成する方法を示します。 デリゲート オブジェクトの便利なプロパティは、演算子を使用して 1 つのデリゲート インスタンスに複数のメソッドを割り当てることができるということです。 マルチキャスト デリゲートには、割り当てられたデリゲートの一覧が含まれています。 マルチキャスト デリゲートを呼び出すと、リスト内のデリゲートが順番に呼び出されます。 同じ型のデリゲートのみを結合できます。 演算子を使用して、マルチキャスト デリゲートからコンポーネント デリゲートを削除できます。

using System;


namespace DelegateExamples;

// Define a custom delegate that has a string parameter and returns void.
delegate void CustomCallback(string s);

class TestClass
{
    // Define two methods that have the same signature as CustomCallback.
    static void Hello(string s)
    {
        Console.WriteLine($"  Hello, {s}!");
    }

    static void Goodbye(string s)
    {
        Console.WriteLine($"  Goodbye, {s}!");
    }

    static void Main()
    {
        // Declare instances of the custom delegate.
        CustomCallback hiDel, byeDel, multiDel, multiMinusHiDel;

        // In this example, you can omit the custom delegate if you
        // want to and use Action<string> instead.
        //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;

        // Initialize the delegate object hiDel that references the
        // method Hello.
        hiDel = Hello;

        // Initialize the delegate object byeDel that references the
        // method Goodbye.
        byeDel = Goodbye;

        // The two delegates, hiDel and byeDel, are combined to
        // form multiDel.
        multiDel = hiDel + byeDel;

        // Remove hiDel from the multicast delegate, leaving byeDel,
        // which calls only the method Goodbye.
        multiMinusHiDel = (multiDel - hiDel)!;

        Console.WriteLine("Invoking delegate hiDel:");
        hiDel("A");
        Console.WriteLine("Invoking delegate byeDel:");
        byeDel("B");
        Console.WriteLine("Invoking delegate multiDel:");
        multiDel("C");
        Console.WriteLine("Invoking delegate multiMinusHiDel:");
        multiMinusHiDel("D");
    }
}
/* Output:
Invoking delegate hiDel:
  Hello, A!
Invoking delegate byeDel:
  Goodbye, B!
Invoking delegate multiDel:
  Hello, C!
  Goodbye, C!
Invoking delegate multiMinusHiDel:
  Goodbye, D!
*/

同じデリゲートをマルチキャスト デリゲートに複数回追加できます。 マルチキャスト デリゲートを呼び出すと、重複を含め、リスト内のすべてのデリゲートが呼び出されます。 マルチキャスト デリゲートからデリゲートを削除すると、一致する右端のエントリが削除されるため、複数のコピーがある場合は 1 つのインスタンスのみが削除されます。

こちらも参照ください