用一個簡單的例子來演繹事件委托


本篇博文,Insus.NET想使用一個超簡單的例子來演繹事件委托。

我們在開發網頁時,剛開始時在網頁的頂部放一個銨鈕(web control),想實現一個功能。


在xxx.aspx.cs:


OK,某一天,此網頁的內容隨時間而增長,出現了滾屏。想在網頁的底再放一個銨鈕,這個銨鈕執行事件跟網頁頂部銨鈕一的事件一樣的。

 


這樣子,不管是點擊按哪一個銨鈕,所執行的事件是一樣的:



也許一開始你並沒有想到onClick的事件名,直接使用銨鈕一的onClick的名稱,而是如下面的寫法:



在xxx.aspx.cs,我們會使用習慣的習慣,拷貝銨鈕一的事件粘貼在銨鈕二的事件里:



呵呵,此時網頁在運行時,點擊按鈕二與點擊銨鈕一執行的是相同的事情。

某一天,你回過頭來Review你寫的代碼,會發現代碼已經冗余了,你會建一個私有方法,把銨鈕一或二的事件代碼粘貼於這個方法內,然后在銨鈕一或二執行這個方法即可。

 

 上面好象沒有看到任何事件委托情形。沒有關系,我們稍改一下xxx.aspx寫法吧,在網頁中,不寫onClick事件,而是在cs中產生:

 

 
然后在xxx.aspx.cs:


此時,網頁運行起來,沒有什么不同。執行事件與效果跟前面動畫演示一樣。

我們再重新看看這個xxx.aspx.cs的代碼:



發現:

protected void Button1_Click(object sender, EventArgs e)

protected void Button2_Click(object sender, EventArgs e)


所執行的代碼完全一樣,只是這個事件名稱不同。

既然一樣,我們就可以跟上面重構方法一樣,定義一個相同的名稱,參照下面五個步驟:




最后再重構一步:



把xxx.aspx.cs所有注釋刪除,此時,我們看到了事件的委托:



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM