下面的過程演示了如何將符合標准 .NET 模式的事件添加到您的類和結構中。 .NET類庫中的所有事件均基於 EventHandler 委托,定義如下:
public delegate void EventHandler(object sender, EventArgs e);
你可以嘗試手動輸入 EventHandler ,然後按下“F12”跳轉到定義:
.NET Framework 2.0 引入了此委托的一個泛型版本,即 EventHandler<TEventArgs>。
【備注】雖然您定義的類中的事件可基於任何有效委托類型(甚至是可返回值的委托),但是,通常建議您使用 EventHandler 讓事件基於 .NET 模式,如下面的示例所示。
1.(如果不需要與事件一起發送自定義數據,請跳過此步驟,進入步驟 3a。)在發行者類和訂閱方類均可看見的范圍中聲明自定義數據的類。 然後添加保留您的自定義事件數據所需的成員。 在此示例中,會返回一個簡單字符串。
1 class MyEventArgs : EventArgs 2 { 3 public string Message { get; private set; } 4 5 public MyEventArgs(string message) 6 { 7 Message = message; 8 } 9 }
2.(如果您使用的是 EventHandler<TEventArgs> 的泛型版本,請跳過此步驟。)在發布類中聲明一個委托。 為它指定以 EventHandler 結尾的名稱。 第二個參數指定自定義 EventArgs 類型。
delegate void MyEventHandler(object sender, MyEventArgs args);
3.使用以下任一步驟,在發布類中聲明事件。
(1)如果沒有自定義 EventArgs 類,事件類型就是非泛型 EventHandler 委托。無需聲明委托,因為它已在創建 C# 項目時包含的 System 命名空間中進行了聲明。將以下代碼添加到發行者類中。
public event EventHandler MyEvent;
(2)如果使用的是 EventHandler 的非泛型版本,並且您有一個由 EventArgs 派生的自定義類,請在發布類中聲明您的事件,並且將來自步驟 2 的委托用作類型。
public event MyEventHandler MyEvent;
(3)如果使用的是泛型版本,則不需要自定義委托。 相反,在發行者類中,您應將事件類型指定為 EventHandler<MyEventArgs>,將尖括號中的內容替換為自己的類的名稱。
public event EventHandler<MyEventArgs> MyEvent;
--預覽版,整理中