English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 익명 메서드

익명 메서드라는 이름에서 알 수 있듯이, 익명 메서드는 이름이 없는 메서드입니다. C#에서는 delegate 키워드를 사용하여 익명 메서드를 정의할 수 있으며, 이를 대리자(delegate) 타입의 변수에 할당할 수 있습니다.

익명 메서드에서는 반환 타입을 지정할 필요가 없습니다. 반환 타입은 메서드 본체 내의 return 문으로부터 추론됩니다.

public delegate void Print(int value);
static void Main(string[] args)
{
    Print print = delegate(int val) { 
        Console.WriteLine("익명 메서드 내부. 값: {0}", val); 
    };
    print(100);
}
출력:
익명 메서드 내부. 값:100

익명 메서드가 외부 함수 정의된 변수에 접근

익명 메서드는 외부 함수에서 정의된 변수에 접근할 수 있습니다.

public delegate void Print(int value);
static void Main(string[] args)
{
    int i = 10;
    
    Print prnt = delegate(int val) {
        val += i;
        Console.WriteLine("익명 메서드: {0}", val); 
    };
    prnt(100);
}
출력:
익명 메서드:110

익명 메서드로 파라미터

익명 메서드를 대리자로 받는 메서드에 전달할 수도 있습니다.

아래 예제에서 PrintHelperMethod()은 Print 대리자의 첫 번째 파라미터를 사용합니다:

public delegate void Print(int value);
class Program
{
    public static void PrintHelperMethod(Print printDel, int val)
    { 
        val += 10;
        printDel(val);
    }
    static void Main(string[] args)
    {
        PrintHelperMethod(delegate(int val) { Console.WriteLine("익명 메서드: {0}", val); }, 100);
    }
}
출력:
익명 메서드:110

익명 메서드는 이벤트 처리기로 사용될 수 있습니다.

saveButton.Click += delegate(Object o, EventArgs e)
{ 
    System.Windows.Forms.MessageBox.Show("Save Successfully!"); 
};

C#3.0에서 lambda 표현식이 도입되었으며, 이 표현식도 익명 메서드와 마찬가지로 작동합니다。

익명 메서드의 제한

  • goto, break 또는 continue와 같은 점프 문을 포함할 수 없습니다.

  • 외부 메서드의 ref 또는 out 매개변수에 접근할 수 없습니다.

  • 불안전한 코드를 소유하거나 접근할 수 없습니다.

  • is 연산자의 왼쪽에 사용할 수 없습니다.

 기억해야 할 주요 사항

  1. delegate 키워드를 사용하여 익명 메서드를 정의할 수 있습니다

  2. 익명 메서드는 대리자에 할당되어야 합니다。

  3. 익명 메서드는 외부 변수나 함수에 접근할 수 있습니다。

  4. 익명 메서드는 매개변수로 전달될 수 있습니다。

  5. 익명 메서드는 이벤트 처리기로 사용될 수 있습니다。