영어로 읽기

다음을 통해 공유


MulticastDelegate 클래스

정의

멀티캐스트 대리자를 나타냅니다. 즉, 호출 목록에 요소가 둘 이상 있을 수 있는 대리자입니다.

public abstract class MulticastDelegate : Delegate
[System.Serializable]
public abstract class MulticastDelegate : Delegate
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class MulticastDelegate : Delegate
상속
MulticastDelegate
특성

예제

다음 예제에서는 문자열 컬렉션을 포함하는 클래스 StringContainer정의합니다. 해당 멤버 중 하나는 특정 조건을 충족하는 StringContainer 개체에 저장된 문자열을 표시하는 데 사용되는 CheckAndDisplayDelegate 대리자입니다. 대리자는 단일 문자열을 매개 변수로 사용하고 void 반환합니다(또는 Visual Basic에서는 Sub 프로시저임). 또한 단일 매개 변수, CheckAndDisplayDelegate 대리자가 있는 메서드 DisplayAllQualified포함됩니다. 이렇게 하면 메서드를 호출하고 대리자가 포함하는 메서드에 따라 필터링되는 문자열 집합을 표시할 수 있습니다.

이 예제에서는 다음 두 가지 메서드가 있는 유틸리티 클래스 StringExtensions정의합니다.

  • 자음으로 시작하는 문자열을 표시하는 ConStart.

  • VowelStart모음으로 시작하는 문자열을 표시합니다.

두 메서드 모두 단일 문자열 매개 변수를 포함하고 void반환합니다. 즉, 두 메서드를 모두 CheckAndDisplayDelegate 대리자에게 할당할 수 있습니다.

Test.Main 메서드는 애플리케이션 진입점입니다. StringContainer 개체를 인스턴스화하고, 문자열로 채우고, 단일 메서드를 호출하는 두 개의 CheckAndDisplayDelegate 대리자(conStartvowelStart)를 만듭니다. 그런 다음 Delegate.Combine 메서드를 호출하여 처음에 ConStartVowelStart 대리자를 포함하는 multipleDelegates 대리자를 만듭니다. multipleDelegates 대리자가 호출되면 컬렉션의 모든 문자열이 원래 순서대로 표시됩니다. 각 문자가 각 대리자로 개별적으로 전달되고 각 문자가 두 대리자 중 하나의 필터링 조건을 충족하기 때문입니다. 마지막으로 Delegate.RemoveDelegate.Combine호출한 후 multipleDelegates 두 개의 conStart 대리자를 포함합니다. 호출되면 StringContainer 개체의 각 문자열이 두 번 표시됩니다.

using System;
using System.Collections.Generic;

class StringContainer
{
   // Define a delegate to handle string display.
   public delegate void CheckAndDisplayDelegate(string str);

   // A generic list object that holds the strings.
   private List<String> container = new List<String>();

   // A method that adds strings to the collection.
   public void AddString(string str)
   {
      container.Add(str);
   }

   // Iterate through the strings and invoke the method(s) that the delegate points to.
   public void DisplayAllQualified(CheckAndDisplayDelegate displayDelegate)
   {
      foreach (var str in container) {
         displayDelegate(str);
      }
   }
 }

// This class defines some methods to display strings.
class StringExtensions
{
   // Display a string if it starts with a consonant.
   public static void ConStart(string str)
   {
      if (!(str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
          Console.WriteLine(str);
   }

   // Display a string if it starts with a vowel.
   public static void VowelStart(string str)
   {
      if ((str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
          Console.WriteLine(str);
   }
}

// Demonstrate the use of delegates, including the Remove and
// Combine methods to create and modify delegate combinations.
class Test
{
   static public void Main()
   {
      // Declare the StringContainer class and add some strings
      StringContainer container = new StringContainer();
      container.AddString("This");
      container.AddString("is");
      container.AddString("a");
      container.AddString("multicast");
      container.AddString("delegate");
      container.AddString("example");

      // Create two delegates individually using different methods.
      StringContainer.CheckAndDisplayDelegate conStart = StringExtensions.ConStart;
      StringContainer.CheckAndDisplayDelegate vowelStart = StringExtensions.VowelStart;

      // Get the list of all delegates assigned to this MulticastDelegate instance.
      Delegate[] delegateList = conStart.GetInvocationList();
      Console.WriteLine("conStart contains {0} delegate(s).", delegateList.Length);
      delegateList = vowelStart.GetInvocationList();
      Console.WriteLine("vowelStart contains {0} delegate(s).\n", delegateList.Length);

      // Determine whether the delegates are System.Multicast delegates.
      if (conStart is System.MulticastDelegate && vowelStart is System.MulticastDelegate)
          Console.WriteLine("conStart and vowelStart are derived from MulticastDelegate.\n");

      // Execute the two delegates.
      Console.WriteLine("Executing the conStart delegate:");
      container.DisplayAllQualified(conStart);
      Console.WriteLine();
      Console.WriteLine("Executing the vowelStart delegate:");
      container.DisplayAllQualified(vowelStart);
      Console.WriteLine();

      // Create a new MulticastDelegate and call Combine to add two delegates.
      StringContainer.CheckAndDisplayDelegate multipleDelegates =
            (StringContainer.CheckAndDisplayDelegate) Delegate.Combine(conStart, vowelStart);

      // How many delegates does multipleDelegates contain?
      delegateList = multipleDelegates.GetInvocationList();
      Console.WriteLine("\nmultipleDelegates contains {0} delegates.\n",
                        delegateList.Length);

      // Pass this multicast delegate to DisplayAllQualified.
      Console.WriteLine("Executing the multipleDelegate delegate.");
      container.DisplayAllQualified(multipleDelegates);

      // Call remove and combine to change the contained delegates.
      multipleDelegates = (StringContainer.CheckAndDisplayDelegate) Delegate.Remove(multipleDelegates, vowelStart);
      multipleDelegates = (StringContainer.CheckAndDisplayDelegate) Delegate.Combine(multipleDelegates, conStart);

      // Pass multipleDelegates to DisplayAllQualified again.
      Console.WriteLine("\nExecuting the multipleDelegate delegate with two conStart delegates:");
      container.DisplayAllQualified(multipleDelegates);
   }
}
// The example displays the following output:
//    conStart contains 1 delegate(s).
//    vowelStart contains 1 delegate(s).
//
//    conStart and vowelStart are derived from MulticastDelegate.
//
//    Executing the conStart delegate:
//    This
//    multicast
//    delegate
//
//    Executing the vowelStart delegate:
//    is
//    a
//    example
//
//
//    multipleDelegates contains 2 delegates.
//
//    Executing the multipleDelegate delegate.
//    This
//    is
//    a
//    multicast
//    delegate
//    example
//
//    Executing the multipleDelegate delegate with two conStart delegates:
//    This
//    This
//    multicast
//    multicast
//    delegate
//    delegate

설명

MulticastDelegate 특수 클래스입니다. 컴파일러 및 기타 도구는 이 클래스에서 파생될 수 있지만 명시적으로 파생할 수는 없습니다. Delegate 클래스도 마찬가지입니다.

MulticastDelegate형식을 상속하는 메서드 외에도 공용 언어 런타임은 BeginInvokeEndInvoke두 가지 특수 메서드를 제공합니다. 이러한 메서드에 대한 자세한 내용은 동기 메서드를 비동기적으로 호출하는 참조하세요.

MulticastDelegate 하나 이상의 요소로 구성된 호출 목록이라고 하는 대리자의 연결된 목록이 있습니다. 멀티캐스트 대리자를 호출하면 호출 목록의 대리자가 나타나는 순서대로 동기적으로 호출됩니다. 목록을 실행하는 동안 오류가 발생하면 예외가 throw됩니다.

생성자

MulticastDelegate(Object, String)

MulticastDelegate 클래스의 새 인스턴스를 초기화합니다.

MulticastDelegate(Type, String)

MulticastDelegate 클래스의 새 인스턴스를 초기화합니다.

속성

HasSingleTarget

Delegate 단일 호출 대상이 있는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 Delegate)
Method

대리자가 나타내는 메서드를 가져옵니다.

(다음에서 상속됨 Delegate)
Target

현재 대리자가 인스턴스 메서드를 호출하는 클래스 인스턴스를 가져옵니다.

(다음에서 상속됨 Delegate)

메서드

Clone()

대리자의 단순 복사본을 만듭니다.

(다음에서 상속됨 Delegate)
CombineImpl(Delegate)

Delegate 지정된 Delegate 결합하여 새 대리자를 구성합니다.

CombineImpl(Delegate)

지정된 멀티캐스트(결합 가능) 대리자와 현재 멀티캐스트(결합 가능) 대리자의 호출 목록을 연결합니다.

(다음에서 상속됨 Delegate)
DynamicInvoke(Object[])

현재 대리자가 나타내는 메서드를 동적으로 호출(런타임에 바인딩)합니다.

(다음에서 상속됨 Delegate)
DynamicInvokeImpl(Object[])

전체 호출 목록을 처리합니다.

DynamicInvokeImpl(Object[])

현재 대리자가 나타내는 메서드를 동적으로 호출(런타임에 바인딩)합니다.

(다음에서 상속됨 Delegate)
Equals(Object)

이 멀티캐스트 대리자와 지정된 개체가 같은지 여부를 확인합니다.

GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.

GetInvocationList()

이 멀티캐스트 대리자의 호출 목록을 호출 순서대로 반환합니다.

GetMethodImpl()

현재 MulticastDelegate나타내는 메서드를 반환합니다.

GetMethodImpl()

현재 대리자가 나타내는 메서드를 가져옵니다.

(다음에서 상속됨 Delegate)
GetObjectData(SerializationInfo, StreamingContext)
사용되지 않음.

이 인스턴스를 serialize하는 데 필요한 모든 데이터로 SerializationInfo 개체를 채웁니다.

GetObjectData(SerializationInfo, StreamingContext)
사용되지 않음.

지원되지 않습니다.

(다음에서 상속됨 Delegate)
GetType()

현재 인스턴스의 Type 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
RemoveImpl(Delegate)

MulticastDelegate 지정된 대리자의 호출 목록에서 요소를 제거합니다.

RemoveImpl(Delegate)

다른 대리자의 호출 목록에서 대리자의 호출 목록을 제거합니다.

(다음에서 상속됨 Delegate)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

연산자

Equality(MulticastDelegate, MulticastDelegate)

MulticastDelegate 개체가 같은지 여부를 확인합니다.

Inequality(MulticastDelegate, MulticastDelegate)

MulticastDelegate 개체가 같지 않은지 여부를 확인합니다.

확장 메서드

GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.

적용 대상

제품 버전
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0