delegate(C# 참조)delegate (C# Reference)

delegate 형식의 선언은 메서드 시그니처와 유사합니다.The declaration of a delegate type is similar to a method signature. 반환 값이 있으며 모든 형식의 매개 변수를 개수에 관계없이 사용할 수 있습니다.It has a return value and any number of parameters of any type:

public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);

delegate는 명명된 메서드나 무명 메서드를 캡슐화하는 데 사용할 수 있는 참조 형식입니다.A delegate is a reference type that can be used to encapsulate a named or an anonymous method. 대리자는 C++의 함수 포인터와 비슷하지만 형식 안전성과 보안성을 제공한다는 점이 다릅니다.Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. 대리자 적용에 대해서는 대리자제네릭 대리자를 참조하세요.For applications of delegates, see Delegates and Generic Delegates.

설명Remarks

대리자는 이벤트의 기반이 됩니다.Delegates are the basis for Events.

대리자는 명명된 메서드나 무명 메서드와 연결하여 인스턴스화할 수 있습니다.A delegate can be instantiated by associating it either with a named or anonymous method. 자세한 내용은 명명된 메서드무명 메서드를 참조하세요.For more information, see Named Methods and Anonymous Methods.

대리자는 호환되는 반환 형식 및 입력 매개 변수가 있는 메서드나 람다 식을 사용하여 인스턴스화해야 합니다.The delegate must be instantiated with a method or lambda expression that has a compatible return type and input parameters. 메서드 시그니처에서 허용되는 가변성 수준에 대한 자세한 내용은 대리자의 가변성을 참조하세요.For more information on the degree of variance that is allowed in the method signature, see Variance in Delegates. 무명 메서드에서 사용하기 위해 메서드에 연결할 대리자와 코드를 함께 선언합니다.For use with anonymous methods, the delegate and the code to be associated with it are declared together. 대리자를 인스턴스화하는 두 가지 방법은 이 섹션에서 설명합니다.Both ways of instantiating delegates are discussed in this section.

Example

// 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# language specification

자세한 내용은 C# 언어 사양을 참조하세요.For more information, see the C# Language Specification. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.The language specification is the definitive source for C# syntax and usage.

참고 항목See also

C# 참조C# Reference
C# 프로그래밍 가이드C# Programming Guide
C# 키워드C# Keywords
참조 형식Reference Types
대리자Delegates
이벤트Events
명명된 메서드 및 무명 메서드가 있는 대리자Delegates with Named vs. Anonymous Methods
무명 메서드Anonymous Methods