事件 (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"));
    }
}

事件是一種特殊的多點傳送委派,只能從類別內 (或衍生類別) 或其宣告結構內叫用 (發行者類別)。 如果其他類別或結構訂閱了事件,當發行者類別引發事件時,就會呼叫其事件處理常式方法。 如需詳細資訊與程式碼範例,請參閱事件委派

事件可以標記為 publicprivateprotectedinternalprotected internal,或 private protected。 這些存取修飾詞定義類別使用者如何存取事件。 如需詳細資訊,請參閱存取修飾詞

關鍵字和事件

下列關鍵字適用於事件。

關鍵字 描述 如需相關資訊
static 隨時向呼叫端提供事件,即使沒有任何類別執行個體存在。 靜態類別和靜態類別成員
virtual 允許衍生類別使用 override 關鍵字覆寫事件行為。 繼承
sealed 指定它對衍生類別不再是虛擬。
abstract 編譯器不會產生 addremove 事件存取子區塊,因此衍生類別必須提供自己的實作。

事件可使用 static 關鍵字宣告為靜態事件。 這可隨時向呼叫端提供事件,即使沒有任何類別執行個體存在。 如需詳細資訊,請參閱靜態類別和靜態類別成員

事件可使用 virtual 關鍵字標示為虛擬事件。 這可讓衍生類別使用 override 關鍵字覆寫事件行為。 如需詳細資訊,請參閱繼承。 事件覆寫虛擬事件也可以 sealed,指定它對衍生類別不再是虛擬。 最後,您可以宣告事件為 abstract,也就是編譯器不會產生 addremove 事件存取子區塊。 因此,衍生類別必須提供自己的實作。

C# 語言規格

如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法及用法的限定來源。

另請參閱