- Event
- 어떤 사건이 발생했을 때 Application에 통보하는 방법
- 이벤트 발생기(publisher) : 이벤트 발생시 다른 객체에 이벤트 발생을 통보하는 일을 담당하는 객체
- 이벤트 처리기(Subscriber) : 이벤트 발생시 실제 호출될 method(이벤트 핸들러)가 등록된 객체
- 어떤 사건이 발생했을 때 Application에 통보하는 방법
- Event 선언
- Event와 함께 사용될 delegate의 정의 확인
- delegate는 호출할 method의 형식만 정의한 것이기 때문에 해당 method의 형식이 이미 지정된 delegate가 있다면 그대로 사용이 가능하다
- Event와 함께 사용될 delegate의 정의 확인
public delegate void AnyEventHandler(object sender, EventArgs e);
- event 키워드를 사용하여 class에 event member 정의
- public, protected, private, internal 등의 접근제한자와 static, new 등의 키워드
class MyClass{
public event AnyEventHandler MyEvent;
}
- Event 호출
- class에 event를 선언하면 해당 event를 지정된 delegate 형식의 member field처럼 사용 가능
- 이 class의 객체를 생성하는 클라이언트가 delegate를 event에 연결하지 않았으면 event는 Null이 된다.
- delegate를 event에 연결하였다면 delegate를 참조하게 된다. 따라서 event 호출은 일반적으로 우선 Null인지 확인한 다음 event를 호출하여 실행
protected virtual void AnyMethod(EventArgs e){
if(MyEvent != null)
MyEvent(this, e);
}
- event는 해당 event를 선언한 class에서만 호출 가능
- Event 연결
- event를 선언한 class 밖에서 event는 emmber field처럼 보이지만 할 수 있는 작업은 delegate를 추가하거나 제거하는 일만 가능하다
- delegate 추가
- event를 선언한 class 밖에서 event는 emmber field처럼 보이지만 할 수 있는 작업은 delegate를 추가하거나 제거하는 일만 가능하다
anyobject.MyEvent += new AnyEventHandler(CalledMethod);
- delegate 제거
anyobject.MyEvent -= new AnyEventHandler(CalledMethod);
- Event와 Delegate
- Event를 발생시키는 코드는 delegate instance를 호출하는 것과 동일
- event member가 정의된 class를 사용하는 측에서 이 class의 instance가 발생하는 event를 받기 위해서는 delegate instance를 생성하고 event member에 delegate instance를 추가해야 한다.
- Event guideline
- Event Handler(이벤트 발생시 호출되는 method)는 .NET의 event guideline에 따라 아래의 두개의 parameter를 받는 메쏘드로 정의 된다.
- object class type parameter sender
- 동일한 Event Handler가 복수의 이벤트 발생기에 등록되어 질 수 있으므로 sender는 일반적으로 Event를 발생한 이벤트 발생기 객체에 대한 참조를 포함한다.
- EventArgs class의 sub class type parameter e
- 이벤트 발생기로부터 Event Handler로 전달할 부가적인 정보
- object class type parameter sender
- Event Handler(이벤트 발생시 호출되는 method)는 .NET의 event guideline에 따라 아래의 두개의 parameter를 받는 메쏘드로 정의 된다.
void Onclick(object sender, EventArgs e){
// 이벤트를 처리하는 코드
}
[파일 첨부 : 소스 파일]
출처 : (주)인터데브 솔루션 개발 사업부 박준호님의 C# 동영상 강좌
'프로그램&DB > C#' 카테고리의 다른 글
박준호님의 C# 강좌 - C# 객체 소멸과 Garbage Collection (0) | 2009.04.14 |
---|---|
박준호님의 C# 강좌 - Exception(예외 처리) (0) | 2009.04.14 |
박준호님의 C# 강좌 - Delegate (0) | 2009.04.14 |
박준호님의 C# 강좌 - Collection / ArrayList / HashTable (0) | 2009.04.14 |
박준호님의 C# 강좌 - Namespace (0) | 2009.04.14 |