다음을 통해 공유


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# 키워드

참조 형식(C# 참조)

대리자(C# 프로그래밍 가이드)

이벤트(C# 프로그래밍 가이드)

명명된 메서드와 무명 메서드의 대리자 비교(C# 프로그래밍 가이드)

무명 메서드(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조