방법: 대리자 결합(멀티캐스트 대리자)(C# 프로그래밍 가이드)How to: Combine Delegates (Multicast Delegates)(C# Programming Guide)

이 예제에서는 멀티캐스트 대리자를 만드는 방법을 보여 줍니다.This example demonstrates how to create multicast delegates. 대리자 개체의 유용한 속성은 + 연산자를 사용하여 하나의 대리자 인스턴스에 여러 개체를 할당할 수 있다는 것입니다.A useful property of delegate objects is that multiple objects can be assigned to one delegate instance by using the + operator. 멀티캐스트 대리자는 할당된 대리자 목록을 포함합니다.The multicast delegate contains a list of the assigned delegates. 멀티캐스트 대리자가 호출되면 목록에 있는 대리자가 순서대로 호출됩니다.When the multicast delegate is called, it invokes the delegates in the list, in order. 같은 형식의 대리자만 결합할 수 있습니다.Only delegates of the same type can be combined.

- 연산자는 멀티캐스트 대리자에서 구성 요소 대리자를 제거하는 데 사용할 수 있습니다.The - operator can be used to remove a component delegate from a multicast delegate.

예제Example

using System;

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

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

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

    static void Main()
    {
        // Declare instances of the custom delegate.
        CustomDel 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;

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

        // Create 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!
*/

참고 항목See also