6

我了解重写方法/函数会从其在基类中的实现重新定义其在派生类中的实现。

现在让我感到困惑的是,如果我在 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*/                    
}
4

5 回答 5

11

这取决于你。一般来说,你想调用基类方法,因为它可能会做很多你不知道的事情(尤其是在你无法控制的类中......明白了吗?控制。)但是,如果你非常有信心,你不需要(或不希望)发生基类“东西”,您可以删除调用。

于 2009-07-09T23:58:51.630 回答
3

这只是您是否要完全替换行为或添加行为的问题。

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

于 2009-07-09T23:59:45.497 回答
1

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

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

默认情况下它在那里的事实只是对您的一些指导。

于 2009-07-10T00:00:55.883 回答
0

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

于 2014-08-21T13:17:04.590 回答
0

这取决于您是否要替换完成基本实现......在大多数情况下,您应该调用基本实现(并且您绝对应该在CreateChildItems方法的情况下这样做......)

于 2009-07-10T00:04:04.020 回答