이벤트를 선언하고 사용하는 절차는 다음과 같다.
1. 델리게이트를 선언
delegate void EventHandler(string msg);
2. 선언한 델리게이트의 인스턴스를 event 한정자로 선언
class Notifier
{
public event EventHandler SomethingHappened;
public void DoSomething(int num)
{
int temp = num % 10;
if (temp != 0 && temp % 3 == 0)
{
SomethingHappened(String.Format("{0} : 짝", num));
}
}
}
3. 이벤트 핸들러 작성. 1에서 선언한 델리게이트와 일치하는 메소드면 가능
class MainApp
{
public static void MyHandler(string msg)
{
Console.WriteLine(msg);
}
//..
}
4. 클래스의 인스턴스를 생성하고, 이 객체의 이벤트에 3에서 작성한 이벤트 핸들러 등록
class MainApp
{
//...
static void Main()
{
Notifier notifier = new Notifier();
notifier.SomethingHappened += new EventHandler(MyHandler);
for(int i = 1; i<30; i++)
{
notifier.DoSomething(i);
}
}
}
5. 이벤트가 발생하면 이벤트 핸들러 호출
for(int i = 1; i<30; i++)
{
notifier.DoSomething(i);
}
3 : 짝
6 : 짝
9 : 짝
13 : 짝
16 : 짝
19 : 짝
23 : 짝
26 : 짝
29 : 짝
델리게이트와 이벤트는 뭐가 다를까?
이벤트는 외부에서 직접 사용할 수 없다.
public 으로 선언되어 있어도 자신이 선언 되어 있는 클래스의 외부에서는 호출이 불가
반면, 델리게이트는 public / internal로 수식되어 있으면 클래스 외부에서도 호출가능
델리게이트는 콜백 용도로 사용
이벤트는 객체의 상태 변화나 사건의 발생을 알리는 용도로 사용해야 함.
참조
뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어
'아카이빙 > C#' 카테고리의 다른 글
[C#] LINQ (0) | 2018.06.26 |
---|---|
[C#] 람다식 (Lambda Expression) (0) | 2018.06.26 |
[C#] Delegate와 익명메소드 (0) | 2018.06.25 |
[C#] Delegate는 언제 사용하는가 (0) | 2018.06.25 |
[C#] Delegate (대리자) (0) | 2018.06.25 |