我正在开发一个应用程序。为了论证的缘故,让我们说应用程序代表动物园。每个动物园中的数据被存储在一个List <Zoo>
型变量,其中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>
没有多大意义。在我的特定应用程序中,这种转换可能发生在许多列表中,每个列表包含大量项目(1000s),每个列表每秒多次,因此我不可能每次都进行转换。
对于上面的例子,组织类结构的最好方法是什么,以便完全避免这个问题?
这_design_不_ “架构” _ – MickyD
让'Zoo'通用?例如:'动物园其中T:动物'? –
UnholySheep
谢谢@MickyD,标题已更新。 –