english version: http://dflying.dflying.net/1/archive/101_prefer_overrides_to_event_handlers_in_aspnet_page.html
這個是我們熟悉的page_load()方法。實際上它是一個event handler,當定義在system.web.ui.page中的load事件觸發時,它開始執行。
// use event handler
protected void page_load(object sender, eventargs e)
{
// logic here
}
這個是system.web.ui.page類中onload()方法的override。 // use override
protected override void onload(eventargs e)
{
// logic here
base.onload(e);
}
雖然上述兩種做法都能完成相同的功能,但是我推薦使用override的做法。
首先,事件處理機制是用來實現獨立的對象之間通信的。例如,當一個button被點擊時,頁面可以通過事件處理機制得知這一消息并進行處理。但在這個例子中,load事件定義在system.web.ui.page中,本身也是我們頁面中的一部分。這樣在一個類的內部發出事件并又在其本身處理這個事件的做法將顯得很奇怪。
其次,效率上考慮,事件處理不及override。這是由.net framework的實現所決定的并且我們都已經了解。
還有,使用事件時需要維護兩個地方:事件處理方法的加載(attach)以及事件處理函數本身的定義。雖然asp.net 2.0已經提供了一些預定義的事件處理方法名,但還有好多開發者在使用asp.net 1.1。而使用override則只需要維護override函數本身。
當然,事件處理機制有它自身的好處,比如可以很方便的在運行時指定事件處理方法,允許分布在各處的多個事件處理方法依次執行。但在asp.net頁面中我們不會用到這些特性。我們總會有一個方法來定義頁面被加載的行為,我們也不會有多個page_load()方法在一個頁面中出現。
更加泛化一點,不單單在asp.net頁面中,其他情況下我們也應該盡可能的使用override而不是event。
使用override的時候需要注意的是不要忘記調用基類的方法(visual studio會替你做好的)。
出處:dflying chen blog
新聞熱點
疑難解答
圖片精選