2017-07-18 3 views
0

コンストラクタでプライベート検証メソッドを呼び出す基本抽象クラスがあります。その子孫の一部については、私はこの小切手をスキップします。このクラスはあまりにも多くの使用法を持っており、私は基本クラスからバリデーションを移動することはできません。よりよい解決策空のインターフェイスまたはプライベートの検証を公開する

  • は、このプロパティを公開するには、このチェック
  • をスキップして、それを仮想保護作って飛ばしてください派生クラスで空の体でそれを上書きしますクラスで実装され、空のインターフェイスを、作成され

    チェック

(他のよりよい解決策も理解されるであろう)

+0

あなたは現在持っているものを投稿できますか? – niksofteng

+0

基本クラス支払いは、オプションのパラメータではないので(オプションのパラメータは良いオプションではないと思います)、支払いとその逆の支払いとこのクラスの子孫との間の通貨に関するコンストラクタの検証です。検証) –

答えて

1

この考慮アプリの場合このクラスにのみ属し、第2のアプローチは私が選ぶだろう。したがって、より多くのクラスでは、クラスから独立した振る舞いを表します。第1のオプションを使用します(チェックなしでクラスを使用する場合は多態性を利用できます)。

0
public abstract class BaseClass { 
    public BaseClass(bool? validate = true) { 
     if (validate.HasValue && validate.Value) { 
      Validate(); 
     } 
    } 

    private void Validate() { } 
} 

public class ChildClass1 : BaseClass { 
    public ChildClass1() : base() { } 
} 

public class ChildClass2 : BaseClass { 
    public ChildClass2() : base(false) { } 
} 
関連する問題