【发布时间】:2016-01-15 19:55:17
【问题描述】:
例如,如何存储所有使用派生自同一基类的类型的 DataContainer 列表。
public class Animal {}
public class Cat : Animal {}
public class Dog : Animal {}
public class DataContainer <TData> where TData : Animal {
TData innerObject = new TData ();
public TData GetData () {
return innerObject;
}
}
public class DataManager {
static void Main () {
DataContainer<Cat> CatData = new DataContainer<Cat> ();
DataContainer<Dog> DogData = new DataContainer<Dog> ();
var AnimalData = new List<DataContainer<Animal>> ();
AnimalData.Add (CatData);
AnimalData.Add (DogData);
for (int i = 0; i < AnimalData.Count; i++) {
Animal animal = AnimalData[i].GetData ();
}
}
}
如果不能使用泛型类,那么可以使用数组吗?
编辑:收到此错误:ArrayTypeMismatchException: Source array type cannot be assigned to destination array type. 这会导致 ArrayTypeMismatchException:
public interface IDataContainer <out TData> where TData : Animal {
}
public class DataContainer <TData> : IDataContainer<TData> where TData : Animal {
}
public class Tester () {
static void Main () {
var AnimalData = new List<DataContainer<Animal>> ();
var CatData = new DataContainer<Cat> ();
AnimalData.Add (CatData as IDataContainer<Animal>); //Error
}
}
在 Unity 5.2 中运行
【问题讨论】:
标签: c# generics inheritance polymorphism