Delegate 클래스

정의

클래스 인스턴스와 해당 클래스의 인스턴스 메서드 또는 정적 메서드를 참조하는 데이터 구조체인 대리자를 나타냅니다.

public ref class Delegate abstract
public ref class Delegate abstract : ICloneable, System::Runtime::Serialization::ISerializable
public abstract class Delegate
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Delegate : ICloneable, System.Runtime.Serialization.ISerializable
type Delegate = class
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
type Delegate = class
    interface ICloneable
    interface ISerializable
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Delegate = class
    interface ICloneable
    interface ISerializable
Public MustInherit Class Delegate
Public MustInherit Class Delegate
Implements ICloneable, ISerializable
상속
Delegate
파생
특성
구현

설명

클래스는 Delegate 대리자 형식의 기본 클래스입니다. 그러나 시스템 및 컴파일러만 클래스 또는 클래스에서 Delegate 명시적으로 파생할 MulticastDelegate 수 있습니다. 대리자 형식에서 새 형식을 파생하는 것도 허용되지 않습니다. 클래스는 Delegate 대리자 형식으로 간주되지 않으며 대리자 형식을 파생하는 데 사용되는 클래스입니다.

대부분의 언어는 키워드(keyword) 구현 delegate 하고 해당 언어에 대한 컴파일러가 클래스에서 파생될 수 있으므로 사용자는 언어에서 MulticastDelegate 제공하는 키워드(keyword) 사용해야 delegate 합니다.

참고

공용 언어 런타임은 대리자 Invoke 와 동일한 서명을 사용하여 각 대리자 형식에 대한 메서드를 제공합니다. 컴파일러가 자동으로 호출하기 때문에 C#, Visual Basic 또는 Visual C++에서 이 메서드를 명시적으로 호출할 필요가 없습니다. 메서드는 Invoke 대리자 형식의 서명을 찾으려는 경우 리플렉션 에 유용합니다.

공용 언어 런타임은 각 대리자 형식에 BeginInvokeEndInvoke 메서드를 제공하여 대리자를 비동기 호출할 수 있도록 합니다. 이러한 메서드에 대한 자세한 내용은 동기 메서드 비동기 호출을 참조하세요.

대리자 형식의 선언은 하나 이상의 메서드의 서명을 지정하는 계약을 설정합니다. 대리자는 다음을 참조하는 대리자 형식의 instance.

  • 형식의 instance 메서드 및 해당 형식에 할당할 수 있는 대상 개체입니다.

  • 형식의 instance 메서드로, 형식 매개 변수 목록에 숨겨진 this 매개 변수가 노출됩니다. 대리자는 개방형 instance 대리자라고 합니다.

  • 정적 메서드입니다.

  • 정적 메서드 및 메서드의 첫 번째 매개 변수에 할당할 수 있는 대상 개체입니다. 대리자는 첫 번째 인수를 통해 닫혀 있다고 합니다.

대리자 바인딩에 대한 자세한 내용은 메서드 오버로드를 CreateDelegate(Type, Object, MethodInfo, Boolean) 참조하세요.

대리자는 첫 번째 인수(가장 일반적인 경우)를 통해 닫힌 instance 메서드를 나타내는 경우 메서드의 진입점에 대한 참조와 메서드를 정의한 형식에 할당할 수 있는 대상이라는 개체에 대한 참조를 저장합니다. 대리자는 열린 instance 메서드를 나타내는 경우 메서드의 진입점에 대한 참조를 저장합니다. 대리자 서명은 형식 매개 변수 목록에 숨겨진 this 매개 변수를 포함해야 합니다. 이 경우 대리자는 대상 개체에 대한 참조가 없으며 대리자를 호출할 때 대상 개체를 제공해야 합니다.

대리자는 정적 메서드를 나타내는 경우 대리자는 메서드의 진입점에 대한 참조를 저장합니다. 대리자는 첫 번째 인수를 통해 닫힌 정적 메서드를 나타내는 경우 메서드의 진입점에 대한 참조와 메서드의 첫 번째 인수 형식에 할당할 수 있는 대상 개체에 대한 참조를 저장합니다. 대리자를 호출하면 정적 메서드의 첫 번째 인수가 대상 개체를 받습니다. 이 첫 번째 인수는 참조 형식이어야 합니다.

대리자의 호출 목록은 목록의 각 요소가 대리자에서 나타내는 메서드 중 하나만 호출하는 순서가 지정된 대리자 집합입니다. 호출 목록에 중복 메서드가 포함될 수 있습니다. 호출하는 동안 메서드는 호출 목록에 표시되는 순서대로 호출됩니다. 대리자는 호출 목록의 모든 메서드를 호출하려고 합니다. 중복 항목은 호출 목록에 표시될 때마다 한 번씩 호출됩니다. 대리자는 변경할 수 없습니다. 만든 후에는 대리자의 호출 목록이 변경되지 않습니다.

대리자는 하나 이상의 메서드를 호출할 수 있고 결합 작업에 사용할 수 있으므로 대리자를 멀티캐스트 또는 결합 가능이라고 합니다.

Remove와 같은 Combine 작업을 결합해도 기존 대리자는 변경되지 않습니다. 대신 이러한 작업은 작업의 결과, 변경되지 않은 대리자 또는 null를 포함하는 새 대리자를 반환합니다. 결합 작업은 작업의 결과가 하나 이상의 메서드를 참조하지 않는 대리자일 때 를 반환 null 합니다. 결합 작업은 요청된 작업이 영향을 주지 않을 때 변경되지 않은 대리자를 반환합니다.

참고

관리되는 언어는 및 Remove 메서드를 Combine 사용하여 대리자 작업을 구현합니다. 예를 들어 Visual Basic의 AddHandler 및 문과 RemoveHandler C#의 대리자 형식에 대한 += 및 -= 연산자가 있습니다.

.NET Framework 4부터 제네릭 대리자 형식에는 변형 형식 매개 변수가 있을 수 있습니다. 반공변 형식 매개 변수는 대리자의 매개 변수 형식으로 사용할 수 있으며 공변 형식 매개 변수를 반환 형식으로 사용할 수 있습니다. 이 기능을 사용하면 동일한 제네릭 형식 정의에서 생성된 제네릭 대리자 형식이 공변성 및 반공변성에서 설명한 대로 해당 형식 인수가 상속 관계가 있는 참조 형식인 경우 할당 호환될 수 있습니다.

참고

분산으로 인해 할당 호환되는 제네릭 대리자는 반드시 결합할 수 있는 것은 아닙니다. 결합 가능하려면 형식이 정확히 일치해야 합니다. 예를 들어 라는 클래스가 라는 DerivedBase클래스에서 파생되었다고 가정합니다. 형식 Action<Base> 의 대리자(Action(Of Base) Visual Basic의 경우)는 형식 Action<Derived>의 변수에 할당할 수 있지만 형식이 정확히 일치하지 않으므로 두 대리자를 결합할 수 없습니다.

호출된 메서드가 예외를 throw하면 메서드 실행이 중지되고, 예외가 대리자의 호출자에게 다시 전달되고, 호출 목록의 나머지 메서드는 호출되지 않습니다. 호출자에서 예외를 catch해도 이 동작은 변경되지 않습니다.

대리자에서 호출하는 메서드의 서명에 반환 값이 포함된 경우 대리자는 호출 목록에서 마지막 요소의 반환 값을 반환합니다. 서명에 참조로 전달되는 매개 변수가 포함된 경우 매개 변수의 최종 값은 호출 목록의 모든 메서드가 순차적으로 실행되고 매개 변수의 값을 업데이트한 결과입니다.

C에서 대리자의 가장 가까운 값은 함수 포인터입니다. 대리자는 정적 메서드 또는 instance 메서드를 나타낼 수 있습니다. 대리자는 instance 메서드를 나타내는 경우 메서드의 진입점에 대한 참조뿐만 아니라 클래스 instance 대한 참조도 저장합니다. 함수 포인터와 달리 대리자는 개체 지향적이며 형식이 안전합니다.

예제는 System.Delegate.CreateDelegate에 대한 추가 API 설명을 참조하세요.

생성자

Delegate(Object, String)

지정된 클래스 인스턴스에서 지정된 인스턴스 메서드를 호출하는 대리자를 초기화합니다.

Delegate(Type, String)

지정된 클래스에서 지정된 정적 메서드를 호출하는 대리자를 초기화합니다.

속성

Method

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

Target

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

메서드

Clone()

대리자의 부분 복사본을 만듭니다.

Combine(Delegate, Delegate)

두 대리자의 호출 목록을 연결합니다.

Combine(Delegate[])

대리자 배열의 호출 목록을 연결합니다.

CombineImpl(Delegate)

지정된 결합할 수 있는 멀티캐스트 대리자와 현재 결합할 수 있는 멀티캐스트 대리자의 호출 목록을 연결합니다.

CreateDelegate(Type, MethodInfo)

지정된 메서드를 나타내는 지정된 형식의 대리자를 만듭니다.

CreateDelegate(Type, MethodInfo, Boolean)

바인딩 실패 시 지정한 동작을 기반으로 지정한 정적 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

CreateDelegate(Type, Object, MethodInfo)

지정한 첫 번째 인수를 사용하여 지정한 정적 또는 인스턴스 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

CreateDelegate(Type, Object, MethodInfo, Boolean)

지정한 첫 번째 인수와 바인딩 실패 시 지정한 동작을 기반으로 지정한 정적 또는 인스턴스 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

CreateDelegate(Type, Object, String)

지정된 클래스 인스턴스에서 호출하는 지정된 인스턴스 메서드를 나타내는 지정된 형식의 대리자를 만듭니다.

CreateDelegate(Type, Object, String, Boolean)

지정된 대/소문자 구분 여부를 기반으로 지정된 클래스 인스턴스에서 호출하는 지정된 인스턴스 메서드를 나타내는 지정된 형식의 대리자를 만듭니다.

CreateDelegate(Type, Object, String, Boolean, Boolean)

지정한 대/소문자 구분과 바인딩 실패 시 지정한 동작을 기반으로 지정한 클래스 인스턴스에서 호출하는 지정한 인스턴스 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

CreateDelegate(Type, Type, String)

지정된 클래스의 지정된 정적 메서드를 나타내는 지정된 형식의 대리자를 만듭니다.

CreateDelegate(Type, Type, String, Boolean)

지정한 대/소문자 구분 여부를 기반으로 지정한 클래스의 지정한 정적 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

CreateDelegate(Type, Type, String, Boolean, Boolean)

지정한 대/소문자 구분과 바인딩 실패 시 지정한 동작을 기반으로 지정한 클래스의 지정한 정적 메서드를 나타내는 지정한 형식의 대리자를 만듭니다.

DynamicInvoke(Object[])

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

DynamicInvokeImpl(Object[])

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

Equals(Object)

지정한 개체와 현재 대리자가 같은 형식이고 같은 대상, 메서드 및 호출 목록을 공유하는지를 확인합니다.

GetHashCode()

대리자의 해시 코드를 반환합니다.

GetInvocationList()

대리자의 호출 목록을 반환합니다.

GetMethodImpl()

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

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

지원되지 않습니다.

GetType()

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

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

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

(다음에서 상속됨 Object)
Remove(Delegate, Delegate)

한 대리자의 호출 목록에 있는 마지막 항목을 다른 대리자의 호출 목록에서 제거합니다.

RemoveAll(Delegate, Delegate)

한 대리자의 호출 목록에 있는 모든 항목을 다른 대리자의 호출 목록에서 제거합니다.

RemoveImpl(Delegate)

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

ToString()

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

(다음에서 상속됨 Object)

연산자

Equality(Delegate, Delegate)

지정된 대리자가 같은지를 확인합니다.

Inequality(Delegate, Delegate)

지정된 대리자가 다른지를 확인합니다.

확장 메서드

GetMethodInfo(Delegate)

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

적용 대상

추가 정보