1. 델리게이트 (delegate )



- 사용자 정의형

- 대리자

- C, C++의 함수포인터와 동일한 기능


어떤 일을 대신 해주는 사람 이라고 생각하자.



예시)


// 매개변수로 string type의 값을받으며 반환은 하지 않는 함수를 대리하는 Log_Event라는 이름을 갖는자료형을 정의

public delegate void Log_Event(string msg);


// func라는 함수가 있다. string을 입력받으며 입력받은 값을 콘솔창에 출력하여 준다.

public void func( string msg )

{

    Console.WriteLine("{ 0 }", msg); 

}


// Log_Event형 log_msg라는 변수를 생성.

public Log_Event log_msg;


// log_msg가 func를 앞으로 대신하여 줄 것이다.

log_msg = func;


// func의 기능을 대신하여 준다. 따라서 입력값을 콘솔창에 출력해준다.

log_msg("text");



- delegate는 반드시 메서드를 참조 시켜야 한다.

- 또한 정의한 형식에 맞아야 한다.



- += 연산자를 통하여 1개의 delegate 변수에 여러 메서드를 참조 시킬 수 있으며 호출은 
  참조 순서대로 호출 된다. 이것을 델리게이트 체인 이라고 한다.

- -= 연산자를 통해 참조했던 함수를 더이상 참조하지 않겠다는 의미로 사용 할 수 있다.











2. 이벤트 ( Event )


- 델리게이트를 통하여 구현


- 하나의 이벤트는 여러개의 작업들이 추가 될 수 있어야 한다.


- 어떤 사건이 일어났을때 특정 함수나 작업을 수행 하는 것.


- 이벤트는 Delegate를 캡슐화 시킨것이라고 생각하자!!


사용 절차 )


1. 델리게이트 선언


2. 클래스 내에 선언한 델리게이트의 선언 앞에 event 한정자를 수식


3. 메소드 형식과 일치하는 이벤트 핸들러 작성


4. 인스턴스 생성 후 3번에서 작성한 이벤트 핸들러 등록


5. 이벤트 발생 -> 이벤트 핸들러 호출





3. 델리게이트 와 이벤트 차이 



Delegate는 클래스 외부에서 임의로 직접 사용 가능

Event는 외부에서 직접 이벤트를 임의로 일으킬 수 없음.





+ Recent posts