yoursyun
델리게이트 이해와 활용 본문
Delegate ( 대리자 )
1. callback method 의 구현시 이용 할 수 있다.
2. 메서드를 연속으로 실행 시켜야 할시 이용 할 수 있다. - Delegate chain
3. 메서드를 대신 실행한다. 정도의 의미로 이해하고, 다른 메서드를 파라메터로 넘기거나,
이벤트와 함께 사용하여, Delegate 가 할당연산자 ( = ) 으로 초기화 되는것을 막아 이용 할 수도 있다.
이벤트 = 델리게이트 로 이해 하는것도 나쁘지 않다.
1. callback method 의 구현시 이용 할 수 있다.
=================================================================
callback method 란 ?
A method, B method, C method ... 있을때, A method 의 parameter로 B 나 C method 를 호출한다.
이때 A method 를 callback mehtod 라 부른다.
=================================================================
Delegate를 이용한 callback mehtod 이용 예제
Delegate int 델리게이트(int a, int b);
void 콜백(int a, int b, 델리게이트 d) { 결과 += d(a ,b) + "\r\n"; }
int PlusB(int a, int b) { return a + b; }
int MinusC(int a, int b) { return a - b; }
main()
{
델리게이트 plus = new 델리게이트(PlusB);
델리게이트 minus = new 델리게이트(MinusC);
콜백(1, 2, plus);
콜백(2, 1, minus);
}
2. 메서드를 연속으로 실행 시켜야 할시 이용 할 수 있다. - Delegate chain
=================================================================
+= 으로 연속 실행 메서드를 추가 할수 있다. 반대는 -=
=================================================================
Delegate void 델리게이트();
void func0 { Console.Write("1"); }
void func1 { Console.Write("2"); }
void func2 { Console.Write("3"); }
main()
{
델리게이트 d = new 델리게이트(func0);
d += d(func1);
d += d(func2);
d();
}
*********** 출력결과 ***********
123
*********** 출력결과 ***********
3. 이벤트를 이용한 할당연산자 문제 처리
=================================================================
2. 번이지만, 할당연산자로 초기화 되는 것을 막을수 있다.
=================================================================
class CLS_A
{
public delegate void 델리게이트( string s );
public event 델리게이트 OnReceived;
public void run(){
OnReceived("event ~");
}
}
class main
{
CLS_A a;
main(){
a = new CLS_A();
a.OnReceived += a_onReceived;
// a.OnReceived = a_ERROR; // 이와 같은 할당을 통해 초기화 되는 문제를 막을 수 있다.
}
// 버튼 클릭시 CLS_A 의 델리게이트(이벤트) 를 실행한다.
void btnClick()
{
a.run();
}
void a_onReceived( string s ) {
console.writeline( s );
}
}