Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#for ASP.NET中重写方法时,是否应该调用基类实现?_C#_Asp.net_Oop_Overriding - Fatal编程技术网

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

在C#for ASP.NET中重写方法时,是否应该调用基类实现?,c#,asp.net,oop,overriding,C#,Asp.net,Oop,Overriding,我理解重写方法/函数会从基类中的实现重新定义其在派生类中的实现 现在让我困惑的是,如果我重写ASP.NET中的一个类,例如CreateChildControls()(我随机选择它,没有特殊原因),VS2008自动生成: protected override void CreateChildControls() { base.CreateChildControls(); } 很好,默认实现只调用基类“CreateChildControls() 因此,如果我想运行一些代码,因为我不知道如何b

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

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

这取决于你。通常,您希望调用基类方法,因为它可能会执行许多您不知道的事情(尤其是在您不控制的类中..获取它?控制)。但是,如果您非常自信您不需要(或希望)基类“东西”发生,您可以删除该调用。

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


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

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

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


默认情况下它就在那里,这对您来说只是一点指导。

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

您可能想看看这个模式。虽然您无法改变库类的实现方式,但它可能有助于确保您编写的代码易于正确使用。

我真的很惊讶,您可以重写您不熟悉的基类。我必须拥有这种自由。仅仅因为我是你的孩子,并不意味着我想像你一样做每件事。有时候,我需要走出去,用我自己的方式做事。如果你强迫我实施你的计划,你将是一个过度保护的家长。:)从我在自定义
控件
中重写时调用基类这一事实开始,关于
OnXxxx
重写,我通常在派生方法末尾调用
base.OnXxxx
。对于是否在派生方法的开头或结尾调用
base.CreateChildControls
,是否有经验法则?这取决于您的代码是否依赖于base.OnXxxx()的效果。如果您不关心,或者不知道,那么应该调用它,并在自己的代码之前调用它,以便基类方法在类运行时尽可能接近它期望的状态。