事件 (C# 參考)
事件是可讓物件觸發通知的成員。 事件使用者可以提供事件處理常式,以附加事件的可執行程式碼。 event
關鍵字會宣告事件。 事件為委派的類型。 在物件觸發事件時,事件會叫用所有提供的事件處理常式。 事件處理常式是新增至 事件的委派執行個體,並在引發事件時執行。 事件使用者可以在事件上新增或移除其事件處理常式。
範例
下例範例示範如何宣告及引發使用 EventHandler 作為基礎委派類型的事件。 如需同時示範如何使用泛型 EventHandler<TEventArgs> 委派型別,以及如何訂閱事件並建立事件處理常式方法的完整程式碼範例,請參閱如何發怖符合 .NET Framework 方針的事件。
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 | 編譯器不會產生 add 和 remove 事件存取子區塊,因此衍生類別必須提供自己的實作。 |
事件可使用 static 關鍵字宣告為靜態事件。 這可隨時向呼叫端提供事件,即使沒有任何類別執行個體存在。 如需詳細資訊,請參閱靜態類別和靜態類別成員。
事件可使用 virtual 關鍵字標示為虛擬事件。 這可讓衍生類別使用 override 關鍵字覆寫事件行為。 如需詳細資訊,請參閱繼承。 事件覆寫虛擬事件也可以 sealed,指定它對衍生類別不再是虛擬。 最後,您可以宣告事件為 abstract,也就是編譯器不會產生 add
和 remove
事件存取子區塊。 因此,衍生類別必須提供自己的實作。
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。