본문 바로가기

C#

C# 이벤트 접근자(add/remove) 커스터마이징

C#에서 이벤트는 주로 외부에서 구독과 해제를 쉽게 하기 위해 add와 remove 접근자를 제공합니다. 기본 구현 대신 커스터마이징을 통해 이벤트 처리 방식을 세밀하게 제어할 수 있습니다.

1. 이벤트 접근자 기본 구조

기본 이벤트는 다음과 같이 선언합니다.

public event EventHandler MyEvent;

이는 컴파일러가 내부적으로 add, remove를 자동 생성합니다.

2. 접근자 직접 구현하기

이벤트 구독과 해제를 커스터마이징하려면 add와 remove를 직접 구현합니다.

private EventHandler myEventHandlers;

public event EventHandler MyEvent
{
    add
    {
        myEventHandlers += value;  // 구독자 추가
    }
    remove
    {
        myEventHandlers -= value;  // 구독자 제거
    }
}

3. 커스터마이징 사례

예를 들어, 특정 조건에서만 구독자를 추가하거나 로그를 남길 수 있습니다.

public event EventHandler MyEvent
{
    add
    {
        Console.WriteLine("Handler added");
        myEventHandlers += value;
    }
    remove
    {
        Console.WriteLine("Handler removed");
        myEventHandlers -= value;
    }
}

4. 직접 이벤트 호출

내부에서 이벤트를 호출할 때는 delegate 변수를 null 체크 후 호출합니다.

myEventHandlers?.Invoke(this, EventArgs.Empty);

이벤트 접근자 커스터마이징을 통해 더 유연한 이벤트 관리가 가능합니다.