event(C# 참조)

event 키워드는 게시자 클래스에서 이벤트를 선언하는 데 사용됩니다.

예시

다음 예제에서는 EventHandler를 기본 대리자 형식으로 사용하는 이벤트를 선언하고 발생시키는 방법을 보여 줍니다. 제네릭 EventHandler<TEventArgs> 대리자 형식을 사용하는 방법 및 이벤트를 구독하고 이벤트 처리기 메서드를 만드는 방법을 보여 주는 전체 코드 예제는 .NET 지침을 따르는 이벤트를 게시하는 방법을 참조하세요.

public class SampleEventArgs
{
    public SampleEventArgs(string text) { Text = text; }
    public string Text { get; } // readonly
}

public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event in a thread-safe manner using the ?. operator.
        SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
    }
}

이벤트는 클래스(또는 파생 클래스) 또는 선언된 구조체(게시자 클래스) 내에서만 호출할 수 있는 특별한 종류의 멀티캐스트 대리자입니다. 다른 클래스 또는 구조체에서 이벤트를 구독하는 경우 해당 이벤트 처리기 메서드는 게시자 클래스에서 이벤트를 발생시킬 때 호출됩니다. 자세한 내용 및 코드 예제는 이벤트대리자를 참조하세요.

이벤트는 public, private, protected, internal, protected internal 또는 private protected로 표시될 수 있습니다. 이러한 액세스 한정자는 클래스 사용자가 이벤트에 액세스하는 방법을 정의합니다. 자세한 내용은 액세스 한정자를 참조하세요.

키워드 및 이벤트

이벤트에 적용되는 키워드는 다음과 같습니다.

키워드 설명 자세한 내용
static 클래스의 인스턴스가 없는 경우에도 언제든지 호출자가 이벤트를 사용할 수 있도록 설정합니다. 정적 클래스 및 정적 클래스 멤버
virtual 파생 클래스에서 override 키워드를 사용하여 이벤트 동작을 재정의할 수 있도록 합니다. 상속
sealed 파생 클래스에 대해 더 이상 가상이 아니도록 지정합니다.
abstract 컴파일러에서 addremove 이벤트 접근자 블록을 생성하지 않으므로 파생 클래스는 자체 구현을 제공해야 합니다.

이벤트는 static 키워드를 사용하여 정적 이벤트로 선언할 수 있습니다. 그러면 클래스의 인스턴스가 없는 경우에도 언제든지 호출자가 이벤트를 사용할 수 있습니다. 자세한 내용은 static 클래스 및 static 클래스 멤버를 참조하세요.

이벤트는 virtual 키워드를 사용하여 가상 이벤트로 표시할 수 있습니다. 그러면 파생 클래스에서 override 키워드를 사용하여 이벤트 동작을 재정의할 수 있습니다. 자세한 내용은 상속을 참조하세요. 또한 가상 이벤트를 재정의하는 이벤트는 sealed일 수 있으며, 파생 클래스에 대해 더 이상 가상이 아니도록 지정합니다. 마지막으로 이벤트를 abstract로 선언할 수 있으며, 컴파일러에서 addremove 이벤트 접근자 블록을 생성하지 않는다는 의미입니다. 따라서 파생 클래스는 자체 구현을 제공해야 합니다.

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용법에 대 한 신뢰할 수 있는 소스 됩니다.

참고 항목