我理解覆盖一个方法/函数会从派生类中的实现重新定义它在基类中的实现。
现在令我困惑的是,如果我覆盖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 :(得分:11)
这取决于你。一般来说,你想调用基类方法,因为它可能会做很多你不知情的东西(特别是在你无法控制的类中......得到它?控制。)但是,如果你对自己很有信心的话不需要(或想要)基类“东西”发生,你可以删除这个电话。
答案 1 :(得分:3)
这只是一个问题,你是想完全取代行为还是添加行为。
对于像CreateChildControls这样的东西,你可能会保留对基类的调用。
答案 2 :(得分:1)
这取决于你想做什么。如果你想调用base.CreateChildControls()方法,然后你想在调用方法之前或之后执行一些自定义操作,那么你可以这样做。
如果您希望完全控制调用CreateChildControls时发生的事情,那么您可以完全忽略完全调用它。
默认情况下,它只是为你提供了一些指导。
答案 3 :(得分:0)
这取决于你是否要替换或完成基础实现...在大多数情况下你应该调用基础实现(你肯定应该在CreateChildItems
方法的情况......)
答案 4 :(得分:0)
您可能需要查看template method模式。虽然您无法对库类的实现方式做任何事情,但它可以帮助您确保您编写的代码易于正确使用。