이벤트는 개체가 알림을 트리거할 수 있도록 하는 멤버입니다. 이벤트 사용자는 이벤트 처리기를 제공하여 이벤트에 대한 실행 코드를 연결할 수 있습니다.
event
키워드는 이벤트를 선언합니다. 이벤트는 대리자 형식입니다. 개체가 이벤트를 트리거하는 동안 이벤트는 제공된 모든 이벤트 처리기를 호출합니다. 이벤트 처리기는 이벤트에 추가되고 이벤트가 발생할 때 실행되는 대리자 인스턴스입니다. 이벤트 사용자는 이벤트에서 이벤트 처리기를 추가하거나 제거할 수 있습니다.
다음 예제에서는 EventHandler를 기본 대리자 형식으로 사용하는 이벤트를 선언하고 발생시키는 방법을 보여 줍니다. 전체 코드 예제는 .NET 지침을 준수하는 이벤트를 게시하는 방법을 참조하세요. 이 샘플에서는 제네릭 EventHandler<TEventArgs> 대리자 형식, 이벤트를 구독하고 이벤트 처리기 메서드를 만드는 방법을 보여 줍니다.
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"));
}
}
이벤트는 클래스(또는 파생 클래스) 또는 선언된 구조체(게시자 클래스) 내에서만 호출할 수 있는 멀티캐스트 대리자입니다. 다른 클래스 또는 구조체가 이벤트를 구독하는 경우 게시자 클래스가 이벤트를 발생시 해당 이벤트 처리기 메서드가 호출됩니다. 자세한 내용 및 코드 예제는 이벤트 및 대리자를 참조하세요.
이벤트를 , , private
, protected internal
protected
internal
또는 private protected
.로 public
표시할 수 있습니다. 이러한 액세스 한정자는 클래스 사용자가 이벤트에 액세스하는 방법을 정의합니다. 자세한 내용은 액세스 한정자를 참조하세요.
C# 14부터 이벤트가 될 partial
수 있습니다. 부분 이벤트에는 하나의 정의 선언과 하나의 구현 선언이 있습니다. 정의 선언은 필드와 유사한 구문을 사용해야 합니다. 구현 선언은 add
및 remove
처리기를 선언해야 합니다.
키워드 및 이벤트
이벤트에 적용되는 키워드는 다음과 같습니다.
키워드 | 설명 | 자세한 내용 |
---|---|---|
static |
클래스의 인스턴스가 없는 경우에도 언제든지 호출자가 이벤트를 사용할 수 있도록 설정합니다. | 정적 클래스 및 정적 클래스 멤버 |
virtual |
파생 클래스에서 override 키워드를 사용하여 이벤트 동작을 재정의할 수 있도록 합니다. | 상속 |
sealed |
파생 클래스의 경우 더 이상 가상이 되도록 지정합니다. | |
abstract |
컴파일러는 이벤트 접근자 블록을 생성 add remove 하지 않으므로 파생 클래스는 자체 구현을 제공해야 합니다. |
정적 키워드를 사용하여 이벤트를 정 적 이벤트로 선언할 수 있습니다. 클래스의 인스턴스가 없더라도 언제든지 호출자가 정적 이벤트를 사용할 수 있습니다. 자세한 내용은 static 클래스 및 static 클래스 멤버를 참조하세요.
키워드를 사용하여 virtual
이벤트를 가상 이벤트로 표시할 수 있습니다. 파생 클래스는 키워드를 사용하여 이벤트 동작을 재정의할 override
수 있습니다. 자세한 내용은 상속을 참조하세요. 가상 이벤트를 재정의하는 이벤트는 파생 클래스의 경우 더 이상 가상이 아니라는 것을 지정하는 이벤트일 sealed
수도 있습니다. 마지막으로 이벤트를 선언 abstract
할 수 있습니다. 즉, 컴파일러에서 이벤트 접근자 블록을 생성 add
remove
하지 않습니다. 따라서 파생 클래스는 자체 구현을 제공해야 합니다.
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하세요. 언어 사양은 C# 구문 및 사용법에 대 한 신뢰할 수 있는 소스 됩니다.
참고 항목
.NET