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