delegate 연산자
연산자는 delegate
대리자 형식으로 변환할 수 있는 익명 메서드를 만듭니다. 무명 메서드는 여러 메서드의 인수로 사용되는 형식과 System.Func<TResult> 같은 System.Action 형식으로 변환할 수 있습니다.
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!
이는 람다 식에서 지원되지 않는 익명 메서드의 유일한 기능입니다. 다른 모든 경우 인라인 코드를 작성하는 데 람다 식이 선호됩니다. dis카드를 사용하여 메서드에서 사용하지 않는 익명 메서드의 입력 매개 변수를 두 개 이상 지정할 수 있습니다.
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# 언어 사양의 익명 함수 식 섹션을 참조하세요.
참고 항목
.NET feedback
The .NET documentation is open source. Provide feedback here.
피드백
다음에 대한 사용자 의견 제출 및 보기