根据传入的值将集合赋值为派生类型

本文关键字:赋值 集合 派生 类型 | 更新日期: 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