【原創】對ASP.NET中關於事件委託的理解

來源:互聯網
上載者:User

這次單獨講講事件委託

理解一:事件委託的概念

.NET架構的事件委託遵循特定的簽名和命名規範。這種約定依賴於可視化設計工具,為用戶端代碼提供了一致性的模型。為了理解這種約定,下面來看看.NET架構中一個常見的可訪問事件委託System.EventHandler:

 

public delegate void EventHandler(object sender,EventArgs e);

 

下面是一些特定的事件委託簽名約定:

◎ 事件委託的傳回型別是void

◎ 一個事件委託帶有兩個參數。第一個參數是object類型,表示事件的寄件者。第二個參數

描述事件的資料,是由System.EventArgs派生出的類的執行個體。

 

應該根據.NET架構的命名規範來給事件數目據類和事件委託命名。事件數目據類由事件名再添加

尾碼EventArgs構成,如MonthChangeEventArgs。

事件委託由事件名再添加EventHandler尾碼構成,如MonthChangeEventHandler。事件委託

用事件處理常式(Event Handler)命名是因為她們將綁定到處理事件的方法上。

 

理解二:Wiring事件

將事件處理常式和事件相關聯的過程(添加委託給invocation列表)叫做事件布線(event wiring).

而從事件中刪除事件處理常式的過程叫做事件撤線(event unwring)。

在C#中,對於一個事件的布線和撤線事件處理常式的文法如下:

button.Click += new EventHandler(this.Button_Clicked);

button.Click  -= new EventHandler(this.Button_Clicked) ;

這裡,button是Button控制項的一個執行個體,並建立於具有Button_Clicked方法的類中,該方法處理按鈕的Click事件。

 

理解三:事件委託的實現

 

為了在類中實現事件,需要一個事件數目據的類、事件委託、在類中擁有invocation列表的委託成員,以及一個發布事件通知的方法。

具體實現過程如下:

1)如果類沒有任何關聯的事件數目據,對事件數目據使用EventArgs類。或者可以使用其他事先已經存在的事件數目據類。如果不存在一個合適的事件數目據類,則定義一個事件來包含事件數目據。這個類必須從System.EventArgs中派生。按照規則它的名字應該是事件名加上EventArgs得到。例如,AdCreatedEventArgs,MonthChangedEventArgs.

下面的代碼聲明了一個事件數目據類:

public class LowChargeEventArgs:EventArgs{...}

 

2) 如果事件沒有關聯資料,使用第一步的EventArgs,用System.EventHandler作為事件委託或者使用能匹配事件的預先存在的其他委託。如果不存在一個合適的事件委託,則定義一個事件委託,該委託的第二個參數具備來自第一步的事件數目據類的類型。根據規則,事件委託的名字是在事件後附加EventHandler.例如,AdCreateEventHandler,MonthChangedEventHandler。下面的代碼用來定義事件委託:

public delegate void LowChargeEventHandler(object sender,LowChargeEventArgs e);

 

3) 在類裡,用event關鍵字定義事件成員。將事件名傳遞給事件成員。成員的類型是第二步中事件委託的類型

如下面的例子:

public event LowChargeEventHandler LowCharge;

事件成員包含訂閱事件的委託的列表。當調用這個成員時,它通過調用委託來分配事件。

 

4) 在類裡,定義一個受保護的虛擬方法,在檢查是否有事件監聽器存在之後呼叫事件委託。其參數就是第一步中定義的事件數目據×EventArgs。方法的名字是在事件名前加上首碼On。例如:

protected virtual void OnLowCharge(LowChargeEventArgs e){

       if (LowCharge != null){

          LowCharge(this,e);

          }

}

 

On<EventName>方法的目的是用來通知事件訂閱者。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.