2009-07-09 59 views
6

我明白重寫一個方法/函數在基類中的實現中重新定義了派生類中的實現。在C#for ASP.NET中重寫方法時,我應該調用基類實現嗎?

現在什麼混淆我,是,如果我在ASP.NET如CreateChildControls()覆蓋類(我把它隨機無特殊原因),VS2008自動生成:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

夠好,默認的實現只是調用基類'CreateChildControls()

所以,如果我想運行一些代碼,因爲我不知道該怎麼base.CreateChildControls(),我應該這樣做:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

,或者忽略什麼base.CreateChildControls()乾脆就去做

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

回答

11

這由你決定。一般來說,你想調用基類的方法,因爲它可能會做很多你不知道的東西(特別是在你不控制的類中..得到它?控制)。但是,如果你非常有信心不需要(或者不想)基類「東西」發生,你可以刪除這個調用。

+0

我真的很驚訝,你會被允許覆蓋你不知道的基類。 – Matt 2009-07-10 00:00:59

3

這只是一個問題,您是要完全替換行爲還是添加行爲。

對於像CreateChildControls這樣的東西,您可能會保留對基類的調用。

1

這取決於你想要做什麼。如果你想調用base.CreateChildControls()方法,然後你想在調用方法之前或之後執行一些自定義操作,那麼你可以這樣做。

如果你想完全控制CreateChildControls被調用時發生了什麼,那麼你可以簡單地忽略完全調用它。

事實上,它在默認情況下只是爲您提供一些指導。

0

這取決於如果你想更換完成基本實現......在大多數情況下,你應該調用基實現(和你一定要做到在CreateChildItems方法的情況下...)

0

您可能想看看template method模式。儘管您無法對庫類的實現方式進行任何操作,但它可以幫助您確保您編寫的代碼易於正確使用。

相關問題