0

假设我有一堂课:

    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 构造函数,则 IList 变为海象列表,但如果传递“Giraffes”,则 IList 变为 Giraffes 列表的列表。

所以以上不起作用。有谁知道如何实施

4

1 回答 1

3

您可能正在寻找泛型

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

于 2013-04-17T03:50:02.647 回答