2011-11-16 33 views
1

在一個asp.net webforms應用程序中,我創建了一個基類來爲我的頁面派生。我宣佈在基類網頁加載方法,像這樣:現在重載基類方法時asp.net意外的結果

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Response.Write("base") 
End Sub 

,在繼承這個類的類,我再次使用了頁面加載方法:

Protected Shadows Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Response.Write("descendant") 
End Sub 

是有原因的我不明白,我看到父母和孩子都被寫入頁面。兩個Page_Load方法正在執行。爲什麼是這樣?我的印象是,在後代類中映射或重載基類方法基本上隱藏了基類方法。我已經搜索了互聯網,但我無法找到具體的解釋,爲什麼會發生這種情況。

謝謝, JS

回答

2

Page_Load方法被綁定到Page.Load事件。如果將Page_Load方法添加到子類中,則除了基類之外,框架還會自動將此方法作爲處理程序添加。由預編譯器產生的代碼可能看起來有點像這樣,因此兩種方法都會在Load事件觸發時執行:

// VB.net (no idea if this really compiles, I'm more into C#) 
AddHandler Load, AddressOf BaseClass.PageLoad 
AddHandler Load, AddressOf SubClass.PageLoad 
+0

Dennis,感謝您的反饋。你絕對把我放在正確的軌道上。在閱讀您的文章並做了一些更多的研究之後,我意識到,我最好重寫基類中的OnLoad方法,而不是重載Page_Load。我還發現這個鏈接[weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx](http://weblogs.asp.net/infinitiesloop /archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx)是一個很好的參考。再次感謝。 – John