我从未真正对这个问题做过准备:但是在重写方法中有条件地调用base.SomeMethod()会是一种可怕的犯罪吗?
示例如下:
protected override void SomeMethod()
{
if( condition > 0 )
base.SuperMethod();
}
我知道这可能被认为是不好的做法,但到目前为止我从未读过这样的说法。
答案 0 :(得分:10)
我无法想到为什么这会让我头疼的原因。
覆盖基本方法并将基本方法的功能复制到有条件调用而不是仅调用基本方法会更糟糕。
答案 1 :(得分:7)
class HardHearingPerson : Person
{
override void Listen()
{
if (volume.Acceptable())
base.Listen();
}
}
猜猜这取决于上下文,但我相信它可以合理使用。
答案 2 :(得分:2)
我经常这样做。每次我需要在一个方法中“做更多的事情”时我会覆盖它做我的东西并调用基本方法(反之亦然)
答案 3 :(得分:1)
我认为这完全可以接受。您可能希望仅在某些情况下覆盖基类方法的行为,或者通过调用基本方法然后自己做事来扩展行为。
答案 4 :(得分:1)
如果基类的设计方式是调用某些方法的基本版本是可选的,那么可以省略这些调用。
如果基类的设计方式必须调用基本版本,那么省略它们就不行了。
在我看来,讨论这是否是一种“良好做法”是错误的。为继承构造类的方式基于其目的和设计。 必须调用方法的基本版本的决定是 public interface 类的一部分,关于继承。
当你在不理解基类的设计方式和每个方法服务的目的时,你无法决定什么时候需要或不希望调用基类方法。