STUDY/C#
대리자(Delegate)
빵아찌
2024. 7. 7. 21:40
콜백을 맡아 실행하는 일을 담당
c++의 함수 포인터와 유사
한정자 delegate 반환_형식 대리자_이름( 매개변수_목록 );
예시
delegate int MyDelegate( int a, int b);
대리자는 왜 사용하는 것일까?
대리자를 사용하는 것은 매개변수로 함수를 넘기거나 '대리자 체인'을 통하여 일련의 과정을 연달아 호출할 수 있다.
대리자 체인은 여러 개의 콜백을 차례로 호출이 필요할 때 사용할 수 있다.
delegate void dMethodChain(string str);
void chain1(string str) { Console.WriteLine("1"); }
void chain2(string str) { Console.WriteLine("2"); }
void chain3(string str) { Console.WriteLine("3"); }
---------------------------------------------------
dMethodChain chain = new dMethodChain(chain1);
chain += new dMethodChain(chain2);
chain += new dMethodChain(chain3);
결과는 1, 2, 3 전부 출력이 된다.
대리자에 += 연산자를 통하여 추가가 되지만 -= 연산자를 통하여 체인을 끊을 수 있다.
이와 관련해서는 Delegate.Combine, Delegate.Remove 또한 존재한다.
대리자에는 익명 메서드와 연결하면 더욱 편리하게 사용이 가능하다.
Calc = delegate( int a, int b ) { return a + b };
Console.WriteLine( $" 1 + 2 = {Calc(1, 2)}");