2011-08-17 135 views
-2

當我從父類中覆蓋事件時,例如System.Web.UI.Page中的OnLoad()方法,爲什麼仍然調用「base.OnLoad(e)」,但是甚至當我移除對基類中的重寫方法的調用時,Load事件仍然被觸發?覆蓋類中的派生成員

public partial class _Default : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
    } 
} 
+0

請說明。你是說當你從'OnLoad'方法中刪除'base.OnLoad(e)'時,它不會觸發? – Tejs

回答

3

到base.OnLoad(E)的調用確保在基本實現方法的一切都被稱爲除了你的代碼重寫該方法(在您的覆蓋方法,而不僅僅是代碼執行)。

無論是哪種情況,它都不應該影響成功發起的事件。

+0

是的,提高這個事件與處理它不同。 – BoltClock

1

您的代碼行protected override void OnLoad(EventArgs e)並不是重寫一個事件,因爲OnLoad不是一個事件。它覆蓋System.Web.UI.Control上定義的一個方法,從中繼承System.Web.UI.Page,其中MSDN表示引發Load事件。

如果您的OnLoad的執行調用base.OnLoad(e),您應該發現Load事件被引發。

如果您的OnLoad的執行沒有調用base.OnLoad,那麼應該會發現Load事件不會被引發。

你幾乎肯定要確保你打電話給base.OnLoad