delegate(C# 참조)
대리자 형식의 선언은 메서드 시그니처와 비슷하므로, 반환 값을 가지며 모든 유형의 매개 변수를 원하는 수만큼 사용할 수 있습니다.
public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);
delegate는 명명된 메서드나 익명 메서드를 캡슐화하는 데 사용할 수 있는 참조 형식입니다. 대리자는 C++의 함수 포인터와 비슷하지만 형식 안전성과 보안성을 제공한다는 점이 다릅니다. 대리자 응용 프로그램에 대한 자세한 내용은 대리자 및 제네릭 대리자를 참조하십시오.
설명
대리자는 이벤트의 기반을 형성합니다.
대리자는 명명된 메서드나 무명 메서드와 연결하여 인스턴스화할 수 있습니다. 자세한 내용은 명명된 메서드 및 무명 메서드를 참조하십시오.
대리자는 호환되는 반환 형식과 입력 매개 변수가 있는 메서드나 람다 식으로 인스턴스화해야 합니다. 메서드 시그니처에 허용되는 변동 범위에 대한 자세한 내용은 대리자의 가변성(C# 및 Visual Basic)을 참조하십시오. 무명 메서드와 함께 사용하는 경우 대리자 및 대리자와 연결된 코드가 함께 선언됩니다. 이 단원에서는 대리자를 인스턴스화하는 두 가지 방법을 모두 설명합니다.
예제
// Declare delegate -- defines required signature:
delegate double MathAction(double num);
class DelegateTest
{
// Regular method that matches signature:
static double Double(double input)
{
return input * 2;
}
static void Main()
{
// Instantiate delegate with named method:
MathAction ma = Double;
// Invoke delegate ma:
double multByTwo = ma(4.5);
Console.WriteLine("multByTwo: {0}", multByTwo);
// Instantiate delegate with anonymous method:
MathAction ma2 = delegate(double input)
{
return input * input;
};
double square = ma2(5);
Console.WriteLine("square: {0}", square);
// Instantiate delegate with lambda expression
MathAction ma3 = s => s * s * s;
double cube = ma3(4.375);
Console.WriteLine("cube: {0}", cube);
}
// Output:
// multByTwo: 9
// square: 25
// cube: 83.740234375
}
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하세요. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.
참고 항목
참조
명명된 메서드와 무명 메서드의 대리자 비교(C# 프로그래밍 가이드)