永远不要让公众成员虚拟/抽象-是吗?
早在2000年代,我的一位同事就告诉我,将公共方法虚拟化或抽象化是一种反模式。 例如,他认为这样的课程设计得不好: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } 他说 实现Method1并重写的派生类的开发人员Method2必须重复参数验证。 如果基类的开发人员决定在Method1或Method2以后的可自定义部分周围添加一些内容,他将无法执行。 相反,我的同事提出了这种方法: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument == null) throw new …