연산자는 delegate 대리자 형식으로 변환할 수 있는 익명 메서드를 만듭니다. 무명 메서드는 여러 메서드의 인수로 사용되는 형식과 System.Action 같은 System.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!
람다 식에서 지원하지 않는 익명 메서드의 유일한 기능입니다. 다른 모든 경우에서 람다 식은 인라인 코드를 작성하는 기본 방법입니다. 무시를 사용하여 메서드에서 사용하지 않는 익명 메서드의 입력 매개 변수를 두 개 이상 지정할 수 있습니다.
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 사용하여 대리자 형식을 선언합니다.
컴파일러는 메서드 그룹에서 만든 대리자 개체를 캐시할 수 있습니다. 다음 방법을 고려하십시오.
static void StaticFunction() { }
메서드 그룹을 대리자에 할당하면 컴파일러가 대리자를 캐시합니다.
Action a = StaticFunction;
C# 언어 사양
자세한 내용은 C# 언어 사양Anonymous 함수 식 섹션을 참조하세요.
참고하십시오
.NET