원문: Anonymous Methods (C# Programming Guide)

I. 익명 함수의 정의

익명 함수(anonymous function)은 “인라인(inline)” 문장이거나 표현식으로서 delegate 형식이 사용되는 어디에나 쓰일 수 있다. 사용자는 이름 있는(named) delegate을 초기화하거나, 이름 있는 delegate 형식 대신에 메소드 인자로 익명 함수를 전달할 수 있다.

An anonymous function is an “inline” statement or expression that can be used wherever a delegate type is expected. You can use it to initialize a named delegate or pass it instead of a named delegate type as a method parameter.

II. 무명 함수의 종류

  1. 람다식 (Lambda Expressions)
  2. 익명 메소드 (Anonymous Methods)

III. Delegate 구문의 진화

 class AnonymousFunction
{
    delegate void TestDelegate(string s);

    static void M(string s)
    {
        Console.WriteLine(s);
    }

    static void Main()
    {
        // A. 원래 delegate 구문은
        // 이름 있는 메소드의 초기화가 필수였다.
        TestDelegate testDelA = new TestDelegate(M);

        // B. C# 2.0부터 delegate는 인라인(inline) 코드로
        // 초기화가 가능하도록 바뀌었는데, 이를 "익명 메소드"라 부른다.
        // 이 메소드는 입력 인자로서 string 하나를 받는다.
        TestDelegate testDelB = delegate (string s) { M(s); };

        // C. C# 3.0부터 delegate은 람다식으로
        // 초기화가 가능하도록 바뀌었다.
        // 이 람다식은 입력 인자 (x)로서 string 하나를 받는다.
        // 이 x의 형식은 컴파일러에 의해 (string 형식으로) 추론(infer)된다.
        TestDelegate testDelC = (x) => { M(x); };

        // 위와 같이 세 가지 방식으로
        // 서로 다르게 초기화된 delegate 구문들을 호출해보자.
        testDelA("안녕. 내 이름은 M이고 나는 문장들을 쓰지.");
        testDelB("이건 아무 것도 아니야. 나는 익명이며");
        testDelC("유명한 작가이기도 하니까.");
    }
}