c# - 我应该使方法虚拟还是抽象?
问题描述
我有一个抽象类,它自己进行内部验证。它有另一个方法允许子类进行额外的验证检查。目前,我已经制作了方法abstract
。
protected abstract bool ValidateFurther();
但是,我看到很多子类被迫重写它只是为了 return true
。我正在考虑制作方法virtual
。
protected virtual bool ValidateFurther() => true;
假设验证在抽象类中会很好,这是不是很糟糕?我担心子类可能不会注意到它,即使在需要时也不会覆盖它。这里哪种方法更合适?
解决方案
您可以在设计中添加另一层。
public abstract class Base
{
protected abstract bool ValidateFurther();
}
public abstract class BaseWithValidation : Base
{
protected override bool ValidateFurther() => true;
}
如果你继承的类的一个重要子集应该只返回 true,你可以使用它BaseWithValidation
来避免在任何地方重复代码;用于其他任何用途Base
。
推荐阅读
- css - 如何通过引用状态更改元素的样式?
- r - ggplot2:y 轴上有两个变量(以相同比例测量)的散点图:如何改变美学并添加单独的回归线?
- java - Joshua Bloch 是否说过不要将单例与底层资源一起使用?
- angular - angular:异步调用返回时启用按钮
- automated-tests - AzureFunctions:如何对 QueueTrigger 函数进行同步调用以进行自动化功能测试
- html - 为什么我不能更改弹性项目的大小?
- c++ - 如何在 C++ 中使用来自 boost 库的 rayleigh_distribution<>?
- ajax - 如何在 Vue.js 中使用 Ajax 制作动态下拉列表
- rotation - 如何在 Cypress 中基于 css `transform: rotate(270deg)` 检查方向?
- macos - 使用 SwiftUI 构建的 macOS 应用程序上的工具栏项目闪烁