델리게이트는
메소드를 가르키는 참조형으로서 메소드의 번지를 저장하거나 다른 메소드의 인수로 메소드 자체를 전달하고 싶을때 사용한다.
이벤트와 스레드를 처리하는데 주로 사용된다.
C/C++에서는 함수 포인터가 비슷한 기능을 한다.
하지만 델리게이트는 이보다 더 객체지향적이며 타입이 안정적이다.
여기서 타입이 안정적이다는말은
-> 델리게이트의 형태와 참조할 메소드의 형태가 항상 일치해야함을 뜻한다.
MSDN에 나오는 예제를 예로 보겠다.
다음은 문자열을 인수로 받고, void를 반환하는 메서드이다.
이 메서드를 캡슐화 할 수 있는 Del 이라는 대리자를 선언한다.
public delegate void Del(string message);
형식 : [수정자] delegate [반환형] 델리게이트 이름(매개변수);
대리자 개체경우엔 일반적으로 이름을 제공하거나, 익명 메서드(MSDN에서는 무명 메서드라고함) 를 사용하는 방법으로 만들어진다.
▷ 다음과같이 같은 형식을 띄는 원래 메서드 Func()가 있다.
public static void Func(string message)
{
System.Console.WriteLine(message);
}
▷ 다음과 같이 이미 선언된 델리게이트를 메서드를 이용하여 인스턴스화 한다. // Instantiate the delegate.
위 그림에서 인스턴스화 시켜 대리자 개체(호출자)가 되는 과정이다.
Del handler = DelegateMethod;
▷ 이제 대리자(Delegate)를 통하여 호출해보겠다.
handler("Hello World");
호출자 handler 는 인수인 "Hello World"를 대리자를 통하여 메서드로 보내준다.
만약 메서드의 반환값이 있을경우 대리자가 해당 값을 호출자에게 반환하는 역할까지 한다.
public void MethodWithCallback(int param1, int param2, Del callback) { callback("The number is: " + (param1 + param2).ToString()); } |
델리게이트 Del형식을 매개변수로 받는 매개변수 callback 을 보고 있다.
이 함수를 호출하는데 MethodWidthCallback(1,2, handler); 를 보내주면
param1과 param2를 합한 수를 String으로 변환해서 문자로 합쳐준 후 최종 string을
callback(string message)에 넣어주게 된다.
'C#,WPF' 카테고리의 다른 글
[WPF] 마우스 드래그 소스 분석 (0) | 2012.02.26 |
---|---|
[WPF] Animation 예제(회전) (0) | 2012.02.25 |
[C#.NET] Transform 와 마우스 이벤트 (0) | 2012.02.25 |
C# 기초다지기 간단정리(1/3) (0) | 2012.02.23 |
[WPF] Window의 크기에 따른 객체 크기 변화 (0) | 2012.02.23 |