根据传入的值将集合赋值为派生类型
本文关键字:赋值 集合 派生 类型 | 更新日期: 2023-09-27 18:09:47
假设我有一个类:
public class Farm
{
IList<Animal> Animals { get; set; }
public Farm(string type)
{
if (type == "Walrus")
Animals = new List<Walrus>();
if (type == "Giraffe")
Animals = new List<Giraffe>();
}
}
有两种动物:
public class Animal
{
}
public class Walrus : Animal
{
}
public class Giraffe : Animal
{
}
假设一个农场只能养海象或长颈鹿。如何编写这样的代码:如果将"Walrus"传递给Farm构造函数,illist就变成了一个海象列表;如果将" giraffe "传递给Farm构造函数,illist就变成了一个长颈鹿列表。
所以上面不起作用。有人知道这是怎么实现的吗?
您可能正在寻找泛型:
public class Farm<T> where T: Animal
{
public IList<T> Animals { get; set; }
public Farm()
{
Animals = new List<T>();
}
}
上面的将允许您创建一个专门的Farm
实例,例如
var giraffeFarm = new Farm<Giraffe>();
同时,您可以使用约束来强制类型T
派生自Animal