English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
익명 메서드라는 이름에서 알 수 있듯이, 익명 메서드는 이름이 없는 메서드입니다. 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 연산자의 왼쪽에 사용할 수 없습니다.
delegate 키워드를 사용하여 익명 메서드를 정의할 수 있습니다
익명 메서드는 대리자에 할당되어야 합니다。
익명 메서드는 외부 변수나 함수에 접근할 수 있습니다。
익명 메서드는 매개변수로 전달될 수 있습니다。
익명 메서드는 이벤트 처리기로 사용될 수 있습니다。