代码之家  ›  专栏  ›  技术社区  ›  Ralph Caraveo

在C中有条件地调用重写的基方法#

  •  7
  • Ralph Caraveo  · 技术社区  · 16 年前

    我从来没有真正考虑过这个问题:但是在重写的方法中有条件地调用base.SomeMethod()会是一种可怕的犯罪吗?

    例如:

    protected override void SomeMethod()
    { 
         if( condition > 0 ) 
            base.SuperMethod(); 
    }
    

    我知道这可能被认为是不好的做法,但到目前为止,我实际上从未读过这样的声明。

    5 回复  |  直到 9 年前
        1
  •  10
  •   kemiller2002    16 年前

    我想不出一个理由来解释为什么这件事会在我脑海里变得糟糕。

    如果重写基方法并将基方法的功能复制到有条件地调用而不是只调用基方法,情况会糟糕得多。

        2
  •  7
  •   leppie    16 年前
    class HardHearingPerson : Person
    {
      override void Listen() 
      { 
        if (volume.Acceptable()) 
          base.Listen(); 
      }
    }
    

    我猜这取决于上下文,但我相信它可以有合理的用法。

        3
  •  2
  •   Sergio    16 年前

    我经常这样做。每当我需要在一个方法中“做更多的事情”时,我就重写它,完成我的工作并调用基本方法(反之亦然)

        4
  •  1
  •   Philip Wallace    16 年前

    我认为这是完全可以接受的。您可能希望仅在某些情况下重写基类方法的行为,或者通过调用基类方法然后执行自己的操作来扩展该行为。

        5
  •  1
  •   LBushkin    16 年前

    课程应该是 designed for inheritance :

    如果基类的设计方式是调用某些方法的基类版本是可选的,那么可以忽略这些调用。

    如果基类的设计方式必须调用基类版本,那么忽略它们是不合适的。

    在我看来,讨论这是否是一种“良好做法”没有抓住重点。类的继承结构是基于其目的和设计的。决定 是否 也许 必须 方法的调用基版本是类的一部分 公共接口

    在重写时,如果不了解基类是如何设计的以及每个方法的用途,就无法决定何时调用基类方法是可取的还是不可取的。