0

各クラスが抽象基本クラスから派生する単純なクラス階層が与えられます。すべての派生クラスは、基本クラスが特定の基本メソッドで使用する列挙型の「値」を何らかの方法で提供する必要があります。
例えば

基本クラス:

public abstract class AbstractFoo
{
  bool SaveFoo()
  {
    switch (BarType){...}
  }

}

および派生クラス

public class BananaFoo:AbstractFoo
{
  //barttype = fruit;
}

public class WhaleFoo:AbstractFoo
{
  //barttype = mammal;
}

AbstractFoo から派生したすべてのクラスがプロパティ「enum BarType」を実装していることを確認する方法はいくつかあります。

public abstract BarType BarType{get;}

次に、各派生クラスで BarType を実装して正しい型を返すか、抽象メソッドを追加して非常に類似したことを行います。

public BarType BarType{get{return _bartype;}}

または、フィールドを返す具体的なメソッドを追加します。次に、フィールドを追加することを覚えておく必要がありますが、入力がはるかに少なくなります (C&P)?

これを行うための推奨される方法は何ですか?

4

3 に答える 3

5

もう 1 つのオプションは、派生クラスに強制的に Foo の値を基本クラスに渡すことです。

public abstract class A {
  private readonly BarType _foo;

  protected A(BarType foo) {
    _foo = foo;
  }

  // Does Foo need to be public or is it only used internally by A?
  public BarType Foo { get { return _foo; } }
}

public class B : A {

  public B() : base(BarType.Value1) {
  }
}
于 2013-02-14T07:24:49.747 に答える
2

これを行う正しい方法についてコメントすることはできませんが、私は常に基本型で抽象プロパティを使用して (実装を強制するために)、サブタイプ プロパティから定数を返してきました。

例えば:

public BarType BarType{get{return BarType.WhaleFoo ;}}
于 2013-02-14T06:57:47.323 に答える
1

子クラスごとに列挙型の単一の値のみを返すと仮定すると、私が知っている最善の方法は、基本クラスに抽象プロパティを実装してから、それを各子クラスに実装することです。

public abstract class A {
    public BarType Foo;

    public enum BarType {
        Value1,
        Value2
    }
}

public class B : A {
    public BarType Foo { get { return BarType.Value1; } }
}
于 2013-02-14T06:58:57.493 に答える