本篇博文,Insus.NET想使用一個超簡單的例子來演繹事件委托。
我們在開發網頁時,剛開始時在網頁的頂部放一個銨鈕(web control),想實現一個功能。
OK,某一天,此網頁的內容隨時間而增長,出現了滾屏。想在網頁的底再放一個銨鈕,這個銨鈕執行事件跟網頁頂部銨鈕一的事件一樣的。
這樣子,不管是點擊按哪一個銨鈕,所執行的事件是一樣的:
也許一開始你並沒有想到onClick的事件名,直接使用銨鈕一的onClick的名稱,而是如下面的寫法:
在xxx.aspx.cs,我們會使用習慣的習慣,拷貝銨鈕一的事件粘貼在銨鈕二的事件里:
呵呵,此時網頁在運行時,點擊按鈕二與點擊銨鈕一執行的是相同的事情。
某一天,你回過頭來Review你寫的代碼,會發現代碼已經冗余了,你會建一個私有方法,把銨鈕一或二的事件代碼粘貼於這個方法內,然后在銨鈕一或二執行這個方法即可。
上面好象沒有看到任何事件委托情形。沒有關系,我們稍改一下xxx.aspx寫法吧,在網頁中,不寫onClick事件,而是在cs中產生:
此時,網頁運行起來,沒有什么不同。執行事件與效果跟前面動畫演示一樣。
我們再重新看看這個xxx.aspx.cs的代碼:
發現:
protected void Button1_Click(object sender, EventArgs e)
和
protected void Button2_Click(object sender, EventArgs e)
所執行的代碼完全一樣,只是這個事件名稱不同。
既然一樣,我們就可以跟上面重構方法一樣,定義一個相同的名稱,參照下面五個步驟:
最后再重構一步:
把xxx.aspx.cs所有注釋刪除,此時,我們看到了事件的委托: