대리자는 자체 형식 매개 변수를 정의할 수 있습니다. 제네릭 대리자를 참조하는 코드는 다음 예제와 같이 제네릭 클래스를 인스턴스화하거나 제네릭 메서드를 호출하는 경우처럼 형식 인수를 지정하여 닫힌 생성된 형식을 만들 수 있습니다.
public delegate void Del<T>(T item);
public static void Notify(int i) { }
Del<int> m1 = new Del<int>(Notify);
C# 버전 2.0에는 메서드 그룹 변환이라는 새로운 기능이 있습니다. 이 기능은 구체적인 형식과 제네릭 대리자 형식에 적용되며 이 간단한 구문을 사용하여 이전 줄을 작성할 수 있습니다.
Del<int> m2 = Notify;
제네릭 클래스 내에 정의된 대리자는 클래스 메서드와 동일한 방식으로 제네릭 클래스 형식 매개 변수를 사용할 수 있습니다.
class Stack<T>
{
public delegate void StackDelegate(T[] items);
}
대리자를 참조하는 코드는 다음과 같이 포함하는 클래스의 형식 인수를 지정해야 합니다.
private static void DoWork(float[] items) { }
public static void TestStack()
{
Stack<float> s = new Stack<float>();
Stack<float>.StackDelegate d = DoWork;
}
제네릭 대리자는 일반적인 디자인 패턴에 따라 이벤트를 정의할 때 특히 유용합니다. 이는 보낸 사람 인수를 강력하게 형식화할 수 있어 Object로 캐스팅할 필요가 없기 때문입니다.
delegate void StackEventHandler<T, U>(T sender, U eventArgs);
class Stack<T>
{
public class StackEventArgs : System.EventArgs { }
public event StackEventHandler<Stack<T>, StackEventArgs>? StackEvent;
protected virtual void OnStackChanged(StackEventArgs a)
{
if (StackEvent is not null)
StackEvent(this, a);
}
}
class SampleClass
{
public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { }
}
public static void Test()
{
Stack<double> s = new Stack<double>();
SampleClass o = new SampleClass();
s.StackEvent += o.HandleStackChange;
}
참고하십시오
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET