- 이벤트를 정의하려면 먼저 대리자(Delegate)를 선언해야 한다.
- 클래스 내부에서 이벤트를 정의하고, 해당 이벤트에 대응하는 대리자를 선언한다.
- 외부에서는 이벤트에 대한 핸들러 메서드를 등록하거나 제거할 수 있다.
InVoke :
InVoke
메서드를 호출하여 해당 대리자가 참조하는 메서드를 실행할 수 있다.
- Invoke 를 통해 이벤트를 호출하면 해당 이벤트에 등록된 모든 이벤트 헨들러가 순차적으로 실행 된다.
using System;
// 이벤트를 처리할 대리자 선언
public delegate void EventHandler(string message);
// 이벤트를 정의하는 클래스
public class Publisher
{
// 이벤트 정의 (대리자와 연결)
public event EventHandler MyEvent;
// 이벤트를 발생시키는 메서드
public void RaiseEvent(string message)
{
Console.WriteLine("이벤트 발생: " + message);
// 이벤트가 null이 아니면 이벤트 핸들러 호출
MyEvent?.Invoke(message);
}
}
// 이벤트를 처리하는 클래스
public class Subscriber
{
// 이벤트 핸들러 메서드
public void HandleEvent(string message)
{
Console.WriteLine("이벤트 처리: " + message);
}
}
class Program
{
static void Main()
{
// 이벤트를 발생시키는 객체 생성
Publisher publisher = new Publisher();
// 이벤트를 처리하는 객체 생성
Subscriber subscriber = new Subscriber();
// 이벤트 핸들러 등록
publisher.MyEvent += subscriber.HandleEvent;
// 이벤트 발생
publisher.RaiseEvent("안녕하세요!");
// 이벤트 핸들러 제거
publisher.MyEvent -= subscriber.HandleEvent;
// 다시 이벤트 발생
publisher.RaiseEvent("다시 안녕하세요!"); // 더 이상 처리되지 않음
}
}