delegate 리턴타입 델리게이트명(파라미터);
델리게이트는 자신에게 연결된 함수를 대신 실행시켜주는 역할을 하는 일종의 함수 포인터이다.
즉 자신에게 할당된 함수를 대신 실행시켜준다.
델리게이트와 연결된 메서드의 목록을 확인할 때에는 GetInvocationList 메서드를 이용한다.
ex) foreach (var delegate in XXXXDelegate.GetInvocationList()) { // ... }
델리게이트는 익명 메서드, 람다 메서드와 궁합이 잘 맞는다.
익명 메서드, 람다 메서드는 표현식을 간결하게, 인라인의 형태로 가져감으로써 코드가 축약되고
경우에 따라 가독성이 향상된다.
1. 익명 메서드 (이름이 없는 메서드)
델리게이트에 의해 호출되는 함수가 단순한 작업을 수행하는 '짧은' 메서드라면 굳이 새롭게 메서드의 이름을 정의하고 구현하는 것보다 익명 메서드를 이용하는 것이 낫다.
ex)
delegate void SampleDelegate(string message);
SampleDelegate sample = delegate(string message)
{
Console.WriteLine(message);
};
sample("Hello, World");
2. 람다 메서드 (익명 메서드의 소집합)
람다식의 특징은 람다 연산자 '=>'에 있다.
1번의 예제 내용이 다음과 같이 축약됩니다.
ex)
SampleDelegate sample = (string message) => Console.WriteLine(message);
Delegate(대리자)
1] 함수의 기능을 대신해 주는 대리자 역할을 한다. 2] 여기서 대리자라 하면 자신에게 전달된 함수를 대신해 준다고 보면.. 3] Delegate를 선언하려면 함수의 시그너쳐를 일치 ==> 함수의 매개변수와 데이터 타입..... 4] 이벤트는 델리게이트 기반으로 만들어 졌다. Ex) this.버튼.click += .....(); |
Delegate 선언
delegate 리턴타입 델리게이트명(파라미터타입 변수); |
Delegate 생성 및 호출
델리게이트명 델리변수명 = new 델리게이트명(생성함수명);
{ // 코드 } |
Delegate 간단 예제_1
delegate void deleTest(string strParam); static void Main(string[] args) testDele_1("도망노비 테스트_1"); public static void dely(string strParam) |
Delegate 간단 예제_2
delegate void deleTest(string strParam); class Program deleTest dele_2 = new deleTest(classDele.DeleTest_2); class TestDele |
[출처] [C#] Delegate|작성자 에스이오케이
'강좌 > C#' 카테고리의 다른 글
스레드 콜백함수에 파라미터 보내는 방법 - 스레드, delegate 사용 (0) | 2012.01.17 |
---|---|
Cross-thread operation not valid (0) | 2012.01.17 |
Hashtable, HashSet<T>, Dictionary<TKey, TValue> (0) | 2012.01.16 |
Generic 컬렉션 - List, Dictionary, Queue, Stack (0) | 2012.01.16 |
DictionaryEntry 구조체 (0) | 2012.01.16 |