클래스에서 이벤트 처리가 필요한 경우
(클래스 내에서 특정 조건 도달, 상태 변화 시 이를 외부에 알리고 싶은 경우)
이벤트 등록을 위한 이벤트 헨들러 함수 등록
public event EventHandler myEventHandler ;
외부에서는 이 이벤트 핸들러(myEvnetHandler)에 이벤트 발생 시 동작할 함수를 연결
(EventGenerator은 myEventHandler를 멤버로 가지는 클래스,
EventFunc은 myEventHandler가 실행될 때 호출될 함수)
EventGenerator gen = new EventGenerator ();
gen.myEventHandler += EventFunc;
static void EventFunc(object sender, EventArgs arg)
{
Console.Write("EventFunc hit\n");
}
EventGenerator 내에서 myEventHandler 호출(이벤트를 발생) 시키는 코드를 만나면,
이를 EventFunc에게 전달하고, EventFunc함수가 실행된다.
아래 코드에선 EventGenerator클래스의 Run() 호출 시 이벤트가 발생
class EventGenerator {
public event EventHandler myEventHandler;
public void Run() {
myEventHandler(this, new EventArgs());
}
}
만약 단순 이벤트 발생 정보 외에 특정 값을 전달하고 싶은 경우
적절한 EventArgs 를 정의해야 됨.
class myEventArgs : EventArgs // 콜백 값을 담는 클래스 정의
{
public int num;
public myEventArgs(int num) {
this.num = num;
}
}
위의 이벤트핸드러 호출 부분에 정의한 EventArgs를 넣어서 호출(생성)하면 됨.
class EventGenerator {
public event EventHandler myEventHandler;
public void Run() {
myEventHandler(this, new myEventArgs(int));
}
}
이벤트를 전달 받는 함수에서 EventArgs를
static void EventFunc(object sender, myEventHandlerarg arg)
{
Console.Write( (arg as myEventHandlerarg).num );
}
별도 EventArgs까지 정의할 필요가 없는 경우 EventHandler 에 직접 return type를 정의할 수 있다.
public event EventHandler<T> myEventHandler;
static void EventFunc(object sender, <T> arg)
{
Console.Write( arg );
}
'Part 3 > ¶ C#(C sharp)' 카테고리의 다른 글
UI 접근 (0) | 2020.03.15 |
---|---|
C# 2.0 (0) | 2018.09.14 |
C# 버전 특징 (0) | 2018.09.14 |