代码之家  ›  专栏  ›  技术社区  ›  Matt

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

  •  6
  • Matt  · 技术社区  · 15 年前

    我理解重写方法/函数会根据它在基类中的实现在派生类中重新定义它的实现。

    现在让我困惑的是,如果我重写ASP.NET中的类,例如 CreateChildControls() (我没有特殊原因随机选取),VS2008自动生成:

    protected override void CreateChildControls()
    {
       base.CreateChildControls();
    }
    

    很好,默认实现只调用基类' 创建子控件() .

    所以如果我想运行一些代码,因为我不知道 base.CreateChildControls() ,我应该这样做吗:

    protected override void CreateChildControls()
    {
       /*My Code Here*/                    
       base.CreateChildControls();
    }
    

    或者,忽略什么 base.createChildControls()。 一起去做吧

    protected override void CreateChildControls()
    {
       /*My Code Here*/                    
    }
    
    5 回复  |  直到 15 年前
        1
  •  11
  •   JP Alioto    15 年前

    这由你决定。通常,您希望调用基类方法,因为它可能会做许多您不知道的事情(尤其是在您不控制的类中)。了解了?但是,如果你非常自信你不需要(或者不想)发生基类的“事情”,你可以取消这个调用。

        2
  •  3
  •   Larsenal    15 年前

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

    对于类似createChildControls的内容,您可能会保留对基类的调用。

        3
  •  1
  •   lomaxx    15 年前

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

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

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

        4
  •  0
  •   Thomas Levesque    15 年前

    这要看你是否愿意 代替 完成 基本实现…在大多数情况下,您应该调用基本实现(在 CreateChildItems 方法…

        5
  •  0
  •   Jørgen Fogh    10 年前

    你可能想看看 template method 模式。虽然您不能对库类的实现方式做任何事情,但它可能有助于确保您编写的代码易于正确使用。