익명 함수
익명 함수는 대리자 형식이 예상되는 곳에서 항상 사용할 수 있는 “인라인” 문 또는 식입니다.
이를 사용하여 명명된 대리자를 초기화하거나 명명된 대리자 형식 대신 이를 메서드 매개 변수로 전달할 수 있습니다.
익명 함수에는 두 가지가 있고 각각 다음 항목에서 설명합니다.
C#에서 대리자의 발전
C# 1.0에서는 코드의 다른 위치에 정의된 메서드를 사용하여 명시적으로 초기화하는 방식으로 대리자의 인스턴스를 만들었습니다.
C# 2.0에서는 대리자 호출에서 실행될 수 있는 이름 없는 인라인 문 블록을 작성하는 방법으로 무명 메서드의 개념을 소개했습니다.
C# 3.0에서는 개념적으로 무명 메서드와 비슷하지만 더 간결하고 표현이 다양한 람다 식을 소개했습니다.
이러한 두 기능을 함께 익명 함수라고 합니다.
일반적으로 .NET Framework의 버전 3.5 이상을 대상으로 하는 응용 프로그램은 람다 식을 사용해야 합니다.
다음 예제에서는 C# 1.0에서 C# 3.0까지 대리자 만들기의 발전을 보여 줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | class Test { delegate void TestDelegate(string s); static void M(string s) { Console.WriteLine(s); } static void Main(string[] args) { // Original delegate syntax required // initialization with a named method. TestDelegate testDelA = new TestDelegate(M); // C# 2.0: A delegate can be initialized with // inline code, called an "anonymous method." This // method takes a string as an input parameter. TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; //C# 3.0. 델리게이트가 람다 표현에 의해 초기화 될 수 있고 또한 람다는 //string 입력 파라미터를 받을 수 있는데 x 의 타입은 컴파일러에 의해서 추론됩니다. // C# 3.0. A delegate can be initialized with // a lambda expression. The lambda also takes a string // as an input parameter (x). The type of x is inferred by the compiler. TestDelegate testDelC = (x) => { Console.WriteLine(x); }; // Invoke the delegates. testDelA("Hello. My name is M and I write lines."); testDelB("That's nothing. I'm anonymous and "); testDelC("I'm a famous author."); // Keep console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: Hello. My name is M and I write lines. That's nothing. I'm anonymous and I'm a famous author. Press any key to exit. */ | cs |
ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-functions
반응형
'프로그래밍(Programming) > C#' 카테고리의 다른 글
dynamic 형식 사용 (0) | 2018.09.08 |
---|---|
각종 Linq 함수들 Enumerable.Range, Where,Take, Any, Repeat, Distinct, Zip (0) | 2018.09.07 |
확장명 메서드 : 기존 class 에 기능 추가하기(this) (2) (0) | 2018.09.07 |
확장명 메서드 : 기존 class 에 기능 추가하기(this) (1) (0) | 2018.09.06 |
?. 널 조건부 연산자 와 null 병합 연산자 (0) | 2018.09.06 |