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

时间:2009-07-09 23:52:17

标签: c# asp.net oop override

我理解覆盖一个方法/函数会从派生类中的实现重新定义它在基类中的实现。

现在令我困惑的是,如果我覆盖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*/                    
}

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

这只是一个问题,你是想完全取代行为还是添加行为。

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

答案 2 :(得分:1)

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

如果您希望完全控制调用CreateChildControls时发生的事情,那么您可以完全忽略完全调用它。

默认情况下,它只是为你提供了一些指导。

答案 3 :(得分:0)

这取决于你是否要替换完成基础实现...在大多数情况下你应该调用基础实现(你肯定应该在CreateChildItems方法的情况......)

答案 4 :(得分:0)

您可能需要查看template method模式。虽然您无法对库类的实现方式做任何事情,但它可以帮助您确保您编写的代码易于正确使用。