首页 > 解决方案 > 我应该使方法虚拟还是抽象?

问题描述

我有一个抽象类,它自己进行内部验证。它有另一个方法允许子类进行额外的验证检查。目前,我已经制作了方法abstract

protected abstract bool ValidateFurther();

但是,我看到很多子类被迫重写它只是为了 return true。我正在考虑制作方法virtual

protected virtual bool ValidateFurther() => true;

假设验证在抽象类中会很好,这是不是很糟糕?我担心子类可能不会注意到它,即使在需要时也不会覆盖它。这里哪种方法更合适?

标签: c#.netclass-design

解决方案


您可以在设计中添加另一层。

public abstract class Base
{
    protected abstract bool ValidateFurther();
}

public abstract class BaseWithValidation : Base
{
    protected override bool ValidateFurther() => true;
}

如果你继承的类的一个重要子集应该只返回 true,你可以使用它BaseWithValidation来避免在任何地方重复代码;用于其他任何用途Base


推荐阅读