パブリックメンバーを仮想化または抽象化しないでください-本当にですか?
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 …