델리게이트(Delegate)
- 메서드를 가리키는 참조형이다.
- 메서드의 번지를 저장하거나 다른 메서드의 인수로 메서드 자체를 전달하고 싶을 때 사용한다.
- C++의 함수 포인터에 대응되는 타입이다.
- 한마디로 설명하자면 A클래스의 메서드를 B클래스로 넘겨 B 클래스에서 A 클래스의 메서드를 호출하게 해주는 역할을 한다. (A의 행위를 B에게 위임하여 B가 A의 행위를 대신한다. 대리자)
C# delegate의 개념
C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다.
예를 들면, 아래 RunDelegate 델리게이트는 입력 파라미터가 int 하나이고 리턴 값이 없는 메서드를 가리킨다. RunThis() 메서드와 RunThat()메서드는 모두 int 파라미터 하나에 리턴 값이 없는 메서드이므로, RunDelegate의 함수 형식(prototype)과 맞으므로 이 delegate를 사용할 수 있다.
예를 들면, 아래 RunDelegate 델리게이트는 입력 파라미터가 int 하나이고 리턴 값이 없는 메서드를 가리킨다. RunThis() 메서드와 RunThat()메서드는 모두 int 파라미터 하나에 리턴 값이 없는 메서드이므로, RunDelegate의 함수 형식(prototype)과 맞으므로 이 delegate를 사용할 수 있다.
예제
Delegate를 메서드 파라미터로 전달
Delegate는 동일한 함수 Prototype을 갖는 메서드를 가리키므로 함수의 포인터를 파라미터로 전달하듯, 다른 함수의 파라미터로 사용될 수 있다. delegate 파라미터를 전달받은 쪽은 이를 자신의 내부 함수를 호출하듯 사용할 수 있다. (C# delegate는 내부적으로 .NET Delegate /MulticastDelegate 클래스를 사용한다. 따라서 이 클래스가 지원하는 속성 (예: .Method - 함수 Prototype을 보여줌)과 메서드 (예: GetInvokcationList())를 모두 사용할 수 있다)
아래 예제는 올림차순으로 비교하는 함수(AscendingCompare) 와 내림차순으로 비교하는 함수(DescendingCompare)를 delegate로 전달하여, 하나의 Sort메서드에서 비교함수에 따라 여러 개의 소트가 가능하다는 것을 보여주는 예이다.
아래 예제는 올림차순으로 비교하는 함수(AscendingCompare) 와 내림차순으로 비교하는 함수(DescendingCompare)를 delegate로 전달하여, 하나의 Sort메서드에서 비교함수에 따라 여러 개의 소트가 가능하다는 것을 보여주는 예이다.
예제
그냥 함수 포인터.
위처럼 MySort.CompareDelegate = Asecendiing 과 같이 함수를 대입해주면 쓸 수 있다.,
출처.. 가 기억이 안난다;;; 원 작성자분들 죄송합니다.
'프로그래밍 > C++++ (C#)' 카테고리의 다른 글
도구 상자가 보이지 않는다!!! (0) | 2016.02.26 |
---|---|
C#의 where (0) | 2016.01.22 |
delegate (0) | 2016.01.22 |
typeof (0) | 2016.01.22 |
c# using 키워드 (0) | 2016.01.21 |
댓글을 달아 주세요