1

6 つの異なるが類似したタイプをモデル化するアプリケーションのクラスを構築するためのアドバイスが必要です。6 つのタイプには、すべてが共有するいくつかのプロパティとメソッドがあります。また、3 つ、4 つ、または 5 つのプロパティとメソッドが共有するが、他のものには意味を持たないプロパティとメソッドもあります。

現在、次の抽象基本クラスがあります。

  • すべてのサブクラスが使用するプロパティとメソッドは、既に実装されています。
  • 一部のサブクラスが使用するメソッドは、サブクラスで実装される抽象としてマークされます。
  • 一部のサブクラスが使用するプロパティは、null 許容としてマークされているため、プロパティが使用されないサブクラスは null になる可能性があります。

ただし、これは最善の解決策とは思えません。十分な詳細を提供したように感じますが、これが意味をなさない場合はお知らせください。より良い説明を提供できるように努めます。

編集 -- コード例の追加

public abstract class BaseClass
{
    //all classes inheriting from BaseClass would use these properties
    public string Property1{ get; set; }
    public string Property2{ get; set; }

    public void Method1() {
        //all classes inheriting from BaseClass would use this method
    }

    //more than one class (but not all classes) 
    //  inheriting from BaseClass would use these properties
    public int? Property3 { get; set; }
    public bool? Propert4 { get; set; }

    public abstract void Method2() {
        //more than one class (but not all classes) 
        //  inheriting from BaseClass would use this method

        //those not using this method would have empty getters and setters maybe?
    }
}
4

4 に答える 4

2

ただし、これは最善の解決策とは思えません。十分な詳細を提供したように感じますが、これが意味をなさない場合はお知らせください。より良い説明を提供できるように努めます。

詳細はほとんどありませんが、クラス階層に別の「レイヤー」を用意したほうがよいように思えます。

クラス 3、4、および 5 は、別の抽象クラスから派生でき、それが「基本」クラスを継承します。これにより、クラス 1 と 2 に「未使用」のメソッドとプロパティを含める必要がなくなります。

基本的に、「プロパティが使用されないサブクラスがnullになる可能性があるように、一部のサブクラスが使用するプロパティはnull可能としてマークされています」は、基本クラスではなく、サブクラスに追加されます。 3、4、および 5 のサブクラス。

于 2012-07-16T15:49:20.253 に答える
1

nullable の使用を避けるために、階層を作成する必要があります。作成する必要があります

  1. 他の共通プロパティを含む中間サブクラス OR
  2. 共通のプロパティを実装するインターフェイスを宣言し、これらのクラスにそれを実装させます。
于 2012-07-16T15:49:58.460 に答える
1

このように継承できることを知っていますか?

                ****************************                          
                *                          *                          
                *         FooBase          *                          
                *                          *                          
                ****************************                          
                    .                 .
                   .                   .
                  .                     .
          **************            *****************                 
          *            *            *               *                 
          *   FooA     *            *    FooB       *                 
          *            *            *               *                 
          *            *            *               *                 
          **************            *****************                 
           .       .                           .                      
          .         .                           .                     
         .           .                           .                    
        .             .                           .                   
  **************   **************            **************           
  *            *   *            *            *            *           
  *            *   *            *            *            *           
  *  FooA_a    *   *   FooA_b   *            *  FooB_a    *           
  *            *   *            *            *            *           
  *            *   *            *            *            *           
  *            *   *            *            *            *           
  **************   **************            **************           

では、FooBase ではなく FooA で実装できるのに、なぜ null 許容プロパティを追加するのでしょうか?

編集
そして、リード・コプシーフェリーチェ・ポラーノは、私が何かを描いていたので、私を打ち負かしました:P

于 2012-07-16T15:51:36.540 に答える
1

サブクラス化を使用する理由 抽象基本クラスには、すべての型が共有するメソッドのみを持たせます。他のメソッドを別のクラスにプルし、その機能を必要とするクラスが抽出されたクラスと連携できるようにします。これにより、結束が向上し、結合が緩くなります。

于 2012-07-16T15:52:00.410 に答える