事件是可讓物件觸發通知的成員。 事件使用者可以提供事件處理常式,以附加事件的可執行程式碼。
event 關鍵字會宣告事件。 事件為委派的類型。 在物件觸發事件時,事件會叫用所有提供的事件處理常式。 事件處理常式是新增至 事件的委派執行個體,並在引發事件時執行。 事件使用者可以在事件上新增或移除其事件處理常式。
C# 語言參考資料記錄了 C# 語言最新版本。 同時也包含即將推出語言版本公開預覽功能的初步文件。
文件中標示了語言最近三個版本或目前公開預覽版中首次引入的任何功能。
小提示
欲查詢某功能何時首次在 C# 中引入,請參閱 C# 語言版本歷史的條目。
下例範例示範如何宣告及引發使用 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"));
}
}
事件是多播代理,只能在類別(或衍生類別)或你宣告它們的結構體(出版者類別)中呼叫。 如果其他類別或結構訂閱事件,當發行者類別引發事件時,就會呼叫其事件處理程式方法。 如需詳細資訊與程式碼範例,請參閱事件及委派。
你可以將事件標記為 public、 private、 protected internalprotectedinternalprivate protected或 。 這些存取修飾詞定義類別使用者如何存取事件。 如需詳細資訊,請參閱存取修飾詞。
從 C# 14 開始,你可以將事件宣告為 partial。 部分事件有一個定義宣告和一個實作宣告。 定義宣告必須使用類似欄位的語法。 實作宣告必須宣告 add 和 remove 處理程式。
關鍵字和事件
下列關鍵字適用於事件。
-
static: 使呼叫者隨時可取得該事件,即使該類別不存在。 欲了解更多靜態事件資訊,請參閱 靜態類別與靜態類別成員。 -
virtual: 允許衍生類別透過使用 覆寫 關鍵字來覆蓋事件行為。 欲了解更多虛擬活動資訊,請參見 《繼承》。 -
sealed: 規定衍生類別不再是虛擬的。 -
abstract編譯器不會產生add和remove事件存取器區塊,因此衍生類別必須提供自己的實作。
使用 static 關鍵字將事件宣告為靜態事件。 靜態事件隨時可供呼叫端使用,即使類別的實例不存在也一樣。 如需詳細資訊,請參閱靜態類別和靜態類別成員。
使用 virtual 關鍵字將活動標記為虛擬活動。 衍生類別可以使用 關鍵詞來覆寫事件行為 override 。 如需詳細資訊,請參閱繼承。 覆寫虛擬事件的事件也可以是 sealed,它會指定針對衍生類別,它不再是虛擬。 最後,可以宣告 abstract事件,這表示編譯程式不會產生 add 和 remove 事件存取子區塊。 因此,衍生類別必須提供自己的實作。
C# 語言規格
如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。