私はアプリケーションを開発しています。議論のために、アプリケーションが動物園を表すとしましょう。各動物園のためのデータとして定義されるZoo
List <Zoo>
型変数に格納されている:デザインをリストに変換することを避ける<Derived>をリストに追加<Base>
public class Zoo {
List<Animal> animals;
...
}
Animal
は、次のように定義される。
public abstract class Animal {
public virtual string Name {get; set;};
...
}
そして種々のクラスがAnimal
から派生:
public class Dog {
public int nLegs = 4;
public string furColour= "White";
public Dog() {
Name = "Dog";
}
...
}
public class Millipede {
public int nLegs = int.maxValue;
public Millipede() {
Name = "Millipede";
}
...
}
public class Goldfish {
public string colour = "Red";
public Goldfish() {
Name = "Goldfish";
}
...
}
私たちが狂った世界に住んでいるとしましょう。ここでそれぞれZoo
にはAnimal
(ただし、希望する数はAnimal
)一つの特定のZoo
は本当にMillipedes
が好き:
List<Animal>.Add(new Millipede());
List<Animal>.Add(new Millipede());
List<Animal>.Add(new Millipede());
List<Animal>.Add(new Millipede());
別Zoo
が本当に金魚好き:理論的には
List<Animal>.Add(new Goldfish());
List<Animal>.Add(new Goldfish());
List<Animal>.Add(new Goldfish());
List<Animal>.Add(new Goldfish());
、Animal
クラスは何もすることができ、そして、私は別の実装がどのように見えるかを知る方法はありません特定のZoo
クラスになります。理想的には、List<Dog>
またはList<Millipede>
で作業したいと思います。List<Animal>
ではなく、Animal
サブクラスの特定のプロパティ/メソッドにアクセスできます。私はConvert List<DerivedClass> to List<BaseClass>に出くわしました。これにはいくつかのオプションがあり、List<Animal>
からList<Dog>
へのキャストはあまり意味がありません。私の特定のアプリケーションでは、この変換は、リストごとに1秒間に複数回、(1000秒ごとに)多数の項目を持つ多くのリストで発生する可能性があります。そのため、毎回変換を実行することは現実的ではありません。
上記の例のように、この問題を完全に回避できるように、クラス構造を整理する最良の方法は何ですか?
をそれは_design_ない_ "アーキテクチャ" _ – MickyD
'Zoo'は一般的なmakeの?例: 'Zoo T:Animal'? –
UnholySheep
Thanks @MickyD、タイトルが更新されました。 –