C# 이벤트(Event): 사용자 액션 및 시스템 알림 처리
이벤트(Event)는 키 누름, 클릭, 마우스 이동 등의 사용자 액션이나 시스템 생성 알림과 같은 발생 사항입니다. 애플리케이션은 이벤트가 발생할 때 이에 응답해야 합니다. 예를 들어 인터럽트가 있습니다. 이벤트는 프로세스 간 통신에 사용됩니다.
이벤트와 대리자 사용
이벤트는 클래스에서 선언되고 발생하며, 동일 클래스 또는 다른 클래스에서 대리자를 사용하여 이벤트 핸들러와 연결됩니다. 이벤트를 포함하는 클래스는 이벤트를 게시하는 데 사용되며, 이를 게시자(publisher) 클래스라고 합니다. 이 이벤트를 수락하는 다른 클래스를 구독자(subscriber) 클래스라고 합니다. 이벤트는 게시자-구독자(publisher-subscriber) 모델을 사용합니다.
게시자(publisher)는 이벤트와 대리자의 정의를 포함하는 객체입니다. 이벤트-대리자 연결도 이 객체에서 정의됩니다. 게시자 클래스 객체는 이벤트를 호출하고 다른 객체에 알립니다.
구독자(subscriber)는 이벤트를 수락하고 이벤트 핸들러를 제공하는 객체입니다. 게시자 클래스의 대리자는 구독자 클래스의 메서드(이벤트 핸들러)를 호출합니다.
이벤트 선언
클래스 내부에서 이벤트를 선언하려면 먼저 이벤트에 대한 대리자 형식을 선언해야 합니다.
public delegate string BoilerLogHandler(string str);
그런 다음 event 키워드를 사용하여 이벤트를 선언합니다.
event BoilerLogHandler BoilerEventLog;
앞의 코드는 BoilerLogHandler라는 대리자와 BoilerEventLog라는 이벤트를 정의하며, 이벤트가 발생하면 대리자를 호출합니다.
예제
Live Demo
using System;
namespace SampleApp {
public delegate string MyDel(string str);
class EventProgram {
event MyDel MyEvent;
public EventProgram() {
this.MyEvent += new MyDel(this.WelcomeUser);
}
public string WelcomeUser(string username) {
return "Welcome " + username;
}
static void Main(string[] args) {
EventProgram obj1 = new EventProgram();
string result = obj1.MyEvent("Tutorials Point");
Console.WriteLine(result);
}
}
}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Welcome Tutorials Point