event(C# 참조)event (C# reference)

event 키워드는 게시자 클래스에서 이벤트를 선언하는 데 사용됩니다.The event keyword is used to declare an event in a publisher class.

예제Example

다음 예제에서는 EventHandler를 기본 대리자 형식으로 사용하는 이벤트를 선언하고 발생시키는 방법을 보여 줍니다.The following example shows how to declare and raise an event that uses EventHandler as the underlying delegate type. 제네릭 EventHandler<TEventArgs> 대리자 형식을 사용하는 방법 및 이벤트를 구독하고 이벤트 처리기 메서드를 만드는 방법을 보여 주는 전체 코드 예제는 .NET Framework 지침을 따르는 이벤트를 게시하는 방법을 참조하세요.For the complete code example that also shows how to use the generic EventHandler<TEventArgs> delegate type and how to subscribe to an event and create an event handler method, see How to publish events that conform to .NET Framework Guidelines.

public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    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"));
    }
}

이벤트는 해당 이벤트가 선언되는 클래스(게시자 클래스) 또는 구조체 내에서만 호출할 수 있는 특수한 멀티캐스트 대리자입니다.Events are a special kind of multicast delegate that can only be invoked from within the class or struct where they are declared (the publisher class). 다른 클래스 또는 구조체에서 이벤트를 구독하는 경우 해당 이벤트 처리기 메서드는 게시자 클래스에서 이벤트를 발생시킬 때 호출됩니다.If other classes or structs subscribe to the event, their event handler methods will be called when the publisher class raises the event. 자세한 내용 및 코드 예제는 이벤트대리자를 참조하세요.For more information and code examples, see Events and Delegates.

이벤트는 public, private, protected, internal, protected internal 또는 private protected로 표시될 수 있습니다.Events can be marked as public, private, protected, internal, protected internal, or private protected. 이러한 액세스 한정자는 클래스 사용자가 이벤트에 액세스하는 방법을 정의합니다.These access modifiers define how users of the class can access the event. 자세한 내용은 액세스 한정자를 참조하세요.For more information, see Access Modifiers.

키워드 및 이벤트Keywords and events

이벤트에 적용되는 키워드는 다음과 같습니다.The following keywords apply to events.

키워드Keyword 설명Description 추가 정보For more information
staticstatic 클래스의 인스턴스가 없는 경우에도 언제든지 호출자가 이벤트를 사용할 수 있도록 설정합니다.Makes the event available to callers at any time, even if no instance of the class exists. 정적 클래스 및 정적 클래스 멤버Static Classes and Static Class Members
virtualvirtual 파생 클래스에서 override 키워드를 사용하여 이벤트 동작을 재정의할 수 있도록 합니다.Allows derived classes to override the event behavior by using the override keyword. 상속Inheritance
sealedsealed 파생 클래스에 대해 더 이상 가상이 아니도록 지정합니다.Specifies that for derived classes it is no longer virtual.
abstractabstract 컴파일러에서 addremove 이벤트 접근자 블록을 생성하지 않으므로 파생 클래스는 자체 구현을 제공해야 합니다.The compiler will not generate the add and remove event accessor blocks and therefore derived classes must provide their own implementation.

이벤트는 static 키워드를 사용하여 정적 이벤트로 선언할 수 있습니다.An event may be declared as a static event by using the static keyword. 그러면 클래스의 인스턴스가 없는 경우에도 언제든지 호출자가 이벤트를 사용할 수 있습니다.This makes the event available to callers at any time, even if no instance of the class exists. 자세한 내용은 static 클래스 및 static 클래스 멤버를 참조하세요.For more information, see Static Classes and Static Class Members.

이벤트는 virtual 키워드를 사용하여 가상 이벤트로 표시할 수 있습니다.An event can be marked as a virtual event by using the virtual keyword. 그러면 파생 클래스에서 override 키워드를 사용하여 이벤트 동작을 재정의할 수 있습니다.This enables derived classes to override the event behavior by using the override keyword. 자세한 내용은 상속을 참조하세요.For more information, see Inheritance. 또한 가상 이벤트를 재정의하는 이벤트는 sealed일 수 있으며, 파생 클래스에 대해 더 이상 가상이 아니도록 지정합니다.An event overriding a virtual event can also be sealed, which specifies that for derived classes it is no longer virtual. 마지막으로 이벤트를 abstract로 선언할 수 있으며, 컴파일러에서 addremove 이벤트 접근자 블록을 생성하지 않는다는 의미입니다.Lastly, an event can be declared abstract, which means that the compiler will not generate the add and remove event accessor blocks. 따라서 파생 클래스는 자체 구현을 제공해야 합니다.Therefore derived classes must provide their own implementation.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양을 참조하세요.For more information, see the C# Language Specification. C# 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.The language specification is the definitive source for C# syntax and usage.

참조See also