在C#for ASP.NET中重写方法时,我应该调用基类实现吗?

问题描述:

我明白重写一个方法/函数在基类中的实现中重新定义了派生类中的实现。在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*/      
} 

这由你决定。一般来说,你想调用基类的方法,因为它可能会做很多你不知道的东西(特别是在你不控制的类中..得到它?控制)。但是,如果你非常有信心不需要(或者不想)基类“东西”发生,你可以删除这个调用。

+0

我真的很惊讶,你会被允许覆盖你不知道的基类。 – Matt 2009-07-10 00:00:59

这只是一个问题,您是要完全替换行为还是添加行为。

对于像CreateChildControls这样的东西,您可能会保留对基类的调用。

这取决于你想要做什么。如果你想调用base.CreateChildControls()方法,然后你想在调用方法之前或之后执行一些自定义操作,那么你可以这样做。

如果你想完全控制CreateChildControls被调用时发生了什么,那么你可以简单地忽略完全调用它。

事实上,它在默认情况下只是为您提供一些指导。

这取决于如果你想更换完成基本实现......在大多数情况下,你应该调用基实现(和你一定要做到在CreateChildItems方法的情况下...)

您可能想看看template method模式。尽管您无法对库类的实现方式进行任何操作,但它可以帮助您确保您编写的代码易于正确使用。