在覆盖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*/ } 

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

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

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

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

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

它默认存在的事实对你来说只是一点指导。

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

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