Delegate

2015. 8. 3. 02:04프로그래밍/C#

728x90
728x90

Delegate

정의

메소드들에 대한 참조를 가질 수 있는 하나의 사용자 정의 타입이다.


원리

Delegate 에 메소드의 주소를 할당한 후 Delegate 를 호출하면 Delegate 가 메소드를 호출한다.


특징

C 에서의 함수포인터와 같다.

Delegate 는 인스턴스가 아닌 형식(Type) 이다.

delegate 키워드를 사용한다.

함수 자체를 캡슐화하는 기능을 가지고 있다.


사용 이유

메소드를 대신해 호출을 받아서 우리가 원하는 메소드를 대신해서 호출하기 위해 사용한다.


사용 방법
1. Delegate 선언한다. //(C 언어의 함수 형태와 같다. ) 한정자 delegate 반환형식 델리게이트이름 (매개변수);
2. Delegate의 인스턴스를 생성한다. 인스턴스를 생성할 때는 Delegate가 참조할 메소드를 매개 변수로 넘긴다. (*메소드들의 반환 형식과 매개 변수는 델리게이트의 반환 형식과 매개 변수와 같아야 한다.) 
3. 델리게이트를 호출한다.


예시




익명 메소드

정의

이름이 없는 메소드이다.


사용 이유
두 번 다시 사용할 일이 없다고 판단되는 메소드를 참조할 때 사용한다.

예시



이벤트

정의

객체의 상태 변화나 사건의 발생을 알린다


델리게이트의 사용 이유와 다른 점

이벤트는 public로 선언되어 있어도 외부에서 호출이 불가능한 반면, 

델리게이트는 public이나 internal로 선언되어 있으면 외부에서 호출이 가능하다. 


사용 방법

Delegate 선언한다. (클래스 밖이나 안에 선언한다.)

1번에서 선언한 Delegate의 인스턴스를 event 한정자로 수식해서 선언한다.

이벤트 핸들러를 작성한다. 1번에서 선언한 Delegate 와 일치하는 메소드이어야 한다.

클래스 인스턴스 생성하고 이 객체의 이벤트에 3번에서 작성한 이벤트 핸들러를 등록한다.

이벤트가 발생하면 이벤트 핸들러가 호출된다. 





728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[.NET, C#] 비동기 네트워크 API  (0) 2016.02.14
직렬화  (0) 2015.08.03
데이터 보관하기  (0) 2015.08.03
C#이란?  (0) 2015.08.03
가비지 컬렉션  (0) 2015.07.28
ref와 out 차이  (0) 2015.06.23
처음만드는 C# 기초 입출력  (0) 2015.06.22