- Delegate
- 한 객체의 Method에서 자기를 생성한 객체의 함수를 호출해야 할 필요가 있을 때 사용
- 한 시스템에 있는 객체가 다른 객체를 생성해서 그것을 사용하고, 또 그 생성된 객체가 자기를 생성한 객체의 함수를 호출하는 형태의 '양방향 호출'
- Windows API의 Callback function(콜백 함수)를 생성하기 위한 function point 기능을 더 안정적으로 확장
- event와 함께 사용되어 .NET Framework에서 event 처리에 많이 사용
- 일반적인 method와 달리 compile 시에는 매개변수로 전달되는 method가 무엇인지 알지 못한다.
- 한 객체의 Method에서 자기를 생성한 객체의 함수를 호출해야 할 필요가 있을 때 사용
- Delegate의 정의
- 현재 정의 하는 delegate가 어떤 종류의 method를 나타내는지 compiler에게 알려주는 것을 의미
- delegate를 정의할 때는 delegate가 나타내고자 하는 method의 signature의 완전한 사항을 명시해야 한다.
- public, private, protected 접근자 사용 가능
delegate void OneOperation(uint x);
//하나의 uint parameter를 가지고 void를 반환하는 method의 delegate
delegate double TwoOperation(long L1, long L2);
//두 개의 long을 parameter로 받아들이고 double을 반환하는 method의 delegate
public delegate string ThreeOperation();
// parameter가 없으며 string을 반환하는 method의 delegate
- Delegate의 instance 생성 및 사용
- new 연산자를 통해 delegate의 instance를 생성
- 이 instance를 통해 method를 호출
delegate void MyDelegate(string s); // delegate 정의
public static void Hello(string s){ .....} // delegate가 호출할 method
MyDelegate md = new MyDelegate(Hello); // delegate instance 생성
md("Hello World~!") // delegate instance를 통해 Hello Method를 호출
delegate int MyDelegate(string s); // delegate 정의
public static int IntVal(string s){return 123;} // delegate가 호출할 method
MyDelegate md = new MyDelegate(IntVal); // delegate instance 생성
int a = md("Hello World~!"); // delegate instance를 통해 Hello method를 호출
- Multicast Delegate
- delegate를 통해 두 개 이상의 method를 호출하는 것
- 유의 : return 값에 있어서
- Multicast delegate를 구현한다는 것은 한번의 호출로 두 개 이상의 method를 실행하는 것인데, 그 호출의 return 값이 여러개라면 어떤 값을 받을것인가?
- 마지막 return 값 이외에는 리턴받을 수 없다.
- Event 처리와 함께 주료 사용됨
delegate void MyDelegate(string s); // delegate 정의
public static void Hello(string s){.....} // delegate가 호출할 method 1
public static void Process(string s){....} // delegate가 호출할 method 2
MyDelegate md = new MyDelegate(Hello); // 첫번째 호출될 method 생성
md += new MyDelegate(Process); // 두번째 호출될 method 지정
md("Hello World~!"); // delegate instance를 통해 Hello Method를 호출
첨부 : 해당 강좌 소스파일
출 처 : (주) 인터데브 솔루션 개발 사업부 박준호님 C# 동영상 강좌
'프로그램&DB > C#' 카테고리의 다른 글
박준호님의 C# 강좌 - Exception(예외 처리) (0) | 2009.04.14 |
---|---|
박준호님의 C# 강좌 - 이벤트(Event) (0) | 2009.04.14 |
박준호님의 C# 강좌 - Collection / ArrayList / HashTable (0) | 2009.04.14 |
박준호님의 C# 강좌 - Namespace (0) | 2009.04.14 |
[C# 강좌] C# 프로그래밍 #10- 구조체 (0) | 2009.04.08 |