작성 맥락
이 글은 직접 학습하거나 구현하며 남긴 개인 기술 기록입니다. 참고 자료가 있는 경우 본문에 출처를 남기고, 틀린 부분을 발견하면 수정합니다.
C# event
C#에서
Event와EventArgs는 이벤트를 다룰 때 함께 사용되지만 그 역할이 다릅니다.
1. Event (이벤트)
- 정의:
Event는 객체 간의 통신을 위한 메커니즘입니다. 클래스의 상태가 변경될 때 다른 객체에게 알림을 보내는 데 사용됩니다. - 역할: 특정 동작(예: 버튼 클릭, 데이터 변경 등)이 발생했을 때 구독자(Subscriber) 메서드를 호출하기 위해 사용됩니다.
- 형태:
event키워드를 사용해서 이벤트를 선언합니다.
예시 코드:
using System;
public class Publisher
{
// 이벤트 선언
public event EventHandler MyEvent;
public void RaiseEvent()
{
Console.WriteLine("이벤트를 발생시킵니다.");
MyEvent?.Invoke(this, EventArgs.Empty); // 이벤트 발생
}
}
public class Subscriber
{
public void HandleEvent(object sender, EventArgs e)
{
Console.WriteLine("이벤트를 수신했습니다.");
}
}
class Program
{
static void Main()
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
// 이벤트 구독
pub.MyEvent += sub.HandleEvent;
pub.RaiseEvent(); // 이벤트 발생
}
}
출력:
이벤트를 발생시킵니다.
이벤트를 수신했습니다.
2. EventArgs
- 정의:
EventArgs는 이벤트에 전달할 데이터를 담는 기반 클래스입니다. - 역할: 이벤트 핸들러에 추가 정보(데이터)를 전달할 때 사용됩니다. 만약 이벤트에 전달할 정보가 없다면
EventArgs.Empty를 사용할 수 있습니다. - 확장: 대부분의 경우
EventArgs를 상속받아 사용자 정의 이벤트 데이터 클래스를 만듭니다.
사용자 정의 EventArgs 예시:
using System;
public class MyEventArgs : EventArgs
{
public string Message { get; }
public MyEventArgs(string message)
{
Message = message;
}
}
public class Publisher
{
public event EventHandler<MyEventArgs> MyCustomEvent;
public void RaiseEvent()
{
Console.WriteLine("이벤트를 발생시킵니다.");
MyCustomEvent?.Invoke(this, new MyEventArgs("이벤트 데이터 전달"));
}
}
public class Subscriber
{
public void HandleEvent(object sender, MyEventArgs e)
{
Console.WriteLine($"이벤트 수신: {e.Message}");
}
}
class Program
{
static void Main()
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
// 이벤트 구독
pub.MyCustomEvent += sub.HandleEvent;
pub.RaiseEvent(); // 이벤트 발생
}
}
출력:
이벤트를 발생시킵니다.
이벤트 수신: 이벤트 데이터 전달
차이점 요약
| 구분 | Event (이벤트) | EventArgs |
|—————–|——————————————————|—————————————-|
| 역할 | 이벤트를 정의하고 발생시키는 메커니즘 | 이벤트 핸들러에 전달할 데이터를 담는 객체 |
| 사용법 | event 키워드를 사용해서 선언 | 이벤트 핸들러에 EventArgs를 전달 |
| 확장성 | 확장 불가능 (이벤트 자체는 정의된 형태로 사용) | EventArgs를 상속하여 커스텀 가능 |
| 예시 | public event EventHandler MyEvent; | public class MyEventArgs : EventArgs |
정리
- Event: 이벤트를 선언하고 구독자에게 알림을 보내는 기능을 제공.
- EventArgs: 이벤트 발생 시 전달할 데이터를 담는 컨테이너.
EventArgs를 확장하여 사용자 정의 이벤트 데이터를 만들 수 있습니다.
댓글이 보이지 않으면 GitHub에 로그인한 뒤 새로고침해 주세요. 공개 댓글은 로그인 상태에서 더 안정적으로 표시됩니다.