delegate 연산자

delegate 연산자는 대리자 형식으로 변환될 수 있는 무명 메서드를 만듭니다. 무명 메서드는 많은 메서드에 대한 인수로 사용되는 System.ActionSystem.Func<TResult> 형식과 같은 형식으로 변환될 수 있습니다.

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

참고 항목

람다 식은 익명 함수를 만드는 더 간결하고 이해하기 쉬운 방법을 제공합니다. => 연산자를 사용하여 람다 식을 구성합니다.

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

람다 식의 기능(예: 외부 변수 캡처)에 대한 자세한 내용은 람다 식을 참조하세요.

delegate 연산자를 사용하는 경우 매개 변수 목록을 생략할 수 있습니다. 이렇게 하면 다음 예제와 같이 매개 변수 목록을 사용하여 생성된 무명 메서드를 대리자 형식으로 변환할 수 있습니다.

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

이 기능은 람다 식에서 지원되지 않는 무명 메서드의 유일한 기능입니다. 다른 모든 경우 인라인 코드를 작성하는 데 람다 식이 선호됩니다. discards를 사용하여 메서드에서 사용되지 않는 무명 메서드의 입력 매개 변수를 두 개 이상 지정할 수 있습니다.

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

이전 버전과의 호환성을 위해, 단일 매개 변수만 _로 명명된 경우 _가 무명 메서드 내에서 해당 매개 변수의 이름으로 처리됩니다.

무명 메서드 선언 시 static 한정자를 사용할 수 있습니다.

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

정적 무명 메서드는 바깥쪽 범위에서 지역 변수 또는 인스턴스 상태를 캡처할 수 없습니다.

delegate 키워드를 사용하여 대리자 형식을 선언할 수도 있습니다.

C# 11부터 컴파일러는 메서드 그룹에서 만들어진 대리자 개체를 캐시할 수 있습니다. 다음 태그를 살펴봅니다.

static void StaticFunction() { }

메서드 그룹을 대리자에 할당하면 컴파일러는 대리자를 캐시합니다.

Action a = StaticFunction;

C# 11 이전에는 단일 대리자 개체를 재사용하려면 람다 식을 사용해야 했습니다.

Action a = () => StaticFunction();

C# 언어 사양

자세한 내용은 C# 언어 사양익명 함수 식 섹션을 참조하세요.

참고 항목