1. 程式人生 > >【C#】EventHandler委託詳解

【C#】EventHandler委託詳解

MSDN的解釋:EventHandler即事件委託,表示用於處理不具有事件資料的事件的方法。

字面上理解就是一個事件處理器,將一個事件與處理事件的方法聯絡起來的一種機制。
C++中通過函式指標來完成的。
在C#中的事件基於委託模型。委託模型遵守觀察者設計模式,使訂閱者(接收或處理事件的類)能夠向提供方(傳送或引發事件的類)註冊並接收相關通知。

步驟:

  • 首先宣告一個委託,一般命名為:NameEventHandler
// 這些委託沒有返回型別值,並且接受兩個引數(事件源的物件和事件資料的物件)。
public delegate void ThresholdReachedEventHandler
(object sender, ThresholdReachedEventArgs e);
  • 然後宣告一個事件,並指定事件的委託型別
// event關鍵字代表事件,返回型別為委託;
public event EventHandler 事件名;
  • 同時,建立引發事件的方法,一般命名為:OnEventName
// 通常為了引發事件,會新增一個標記為protected和virtual的方法,以允許派生類重寫引發事件的邏輯。
protected virtual void OnThresholdReached(EventArgs e)
{
    EventHandler handler = ThresholdReached;
    if
(handler != null) { handler(this, e); } }
  • 再定義一個事件處理程式方法,處理事件。
static void c_ThresholdReached(object sender, EventArgs e)
{
    Console.WriteLine("The threshold was reached.");
}
  • 最後使用加法賦值運算子 (+=) 來為事件附加事件處理程式。+=表示新增事件,-=表示刪除事件。
// Counter類中需要擁有一個名為ThresholdReached的事件
Counter c = new
Counter(); c.ThresholdReached += c_ThresholdReached; // 以下是老的C#1.0的語法 // c.ThresholdReached += new ThresholdReachedEventHandler(c_ThresholdReached);

this.Activated += new EventHandler(Form1_Activated);

這是一個委託的原理.

this.Activated=你吃完飯;
Form1_Activated=喊我一聲

這句話的意思就是把這兩個事放在一起了,意思就是叫你吃完飯了喊我一聲。我委託你吃完飯了,喊我一聲。這樣我就不用過一會就來看一下你吃完了沒有了,已經委託你了。