Event 與 Event Handler 的介紹與使用

August 17, 2018

本篇主要介紹 C# 中 Event 和 Event Handler 的特性與使用方式。

為什麼要實作 Event

實作 Event

1. 宣告一個 public event handler。

public event EventHandler CountdownCompleted;  

2. 宣告一個 event 發生的函式,函式名稱通常以 On 開頭。

protected virtual void OnCountdownCompleted(object sender, EventArgs e)
{
    if (CountdownCompleted != null)
        CountdownCompleted(this, e);
}

3. 在需要發生事件的地方進行呼叫。

public void Countdown(){
    OnCountdownCompleted(this, new EventArgs());
}

4. 使用者需要接收通知時,可以使用以下語法,當事件發生時,會呼叫 Method 方法。Method 方法需要的參數為 object 和 EventArgs。

Clock.Alarm += Method;
Clock.Countdown();

public void (object sender , EventArgs eventArgs){
    ...
}

5. 可以繼承 EventArgs 類別,夾帶不同類型的資料至 EventHandler 中。

public class CountdownArgs: EventArgs{
    public int times;
    public string tip;
}

在 Static Class 實作 Event

  • 和一般 Event 的宣告類似,額外加入 static 關鍵字即可。
  • 在 invoke 時使用 null 代替 : SomeEvent(null, EventArgs.Empty);
  • 小心使用。除非物件取消訂閱事件 (Unsubscribe event handler from instance ) ,否則 Garbage Collect 機制不會回收物件,將其生命週期視為和 static class 相同。
  • 參考資料:c# - How to raise custom event from a Static Class - Stack Overflow

Event 特性

  • Event delegates are multicast. 當事件發生時,會觸發所有委派的方法。
  • 參考資料:Events and Delegates