C# 무명 메서드(Anonymous Methods): 대리자 사용 간소화
대리자는 대리자와 동일한 시그니처를 가진 모든 메서드를 참조하는 데 사용된다고 논의했습니다. 즉, 대리자 객체를 사용하여 대리자가 참조할 수 있는 메서드를 호출할 수 있습니다.
무명 메서드(Anonymous methods)는 코드 블록을 대리자 매개 변수로 전달하는 기법을 제공합니다. 무명 메서드는 이름이 없고 본문만 있는 메서드입니다.
무명 메서드에서 반환 형식을 지정할 필요가 없습니다. 메서드 본문 내의 return 문에서 유추됩니다.
무명 메서드 작성
무명 메서드는 delegate 키워드를 사용하여 대리자 인스턴스 생성과 함께 선언됩니다. 예를 들어:
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
코드 블록 Console.WriteLine("Anonymous Method: {0}", x);가 무명 메서드의 본문입니다.
대리자는 무명 메서드뿐만 아니라 명명된 메서드와도 동일한 방식으로 호출할 수 있습니다. 즉, 메서드 매개 변수를 대리자 객체에 전달하여 호출합니다.
예를 들어:
nc(10);
예제
다음 예제는 이 개념을 보여줍니다.
Live Demo
using System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
// 무명 메서드를 사용하여 대리자 인스턴스 생성
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
// 무명 메서드를 사용하여 대리자 호출
nc(10);
// 명명된 메서드를 사용하여 대리자 인스턴스화
nc = new NumberChanger(AddNum);
// 명명된 메서드를 사용하여 대리자 호출
nc(5);
// 다른 명명된 메서드를 사용하여 대리자 인스턴스화
nc = new NumberChanger(MultNum);
// 명명된 메서드를 사용하여 대리자 호출
nc(2);
Console.ReadKey();
}
}
}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Anonymous Method: 10
Named Method: 15
Named Method: 30