c#泛型类定义说明

时间:2012-10-05 08:15:25

标签: c# .net generics

有人可以解释以下类声明。我被赋予了一项任务,以了解代码片段并解释其中的部分内容。我对这个班级宣言没有意义。看看你们中是否有人可以提供帮助。

class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new()
{
    private IHerbivore _herbivore;
    private ICarnivore _carnivore;
    private T _factory;

    /// <summary>
    /// Contructor of Animalworld
    /// </summary>
    public AnimalWorld()
    {
        // Create new continent factory
        _factory = new T();

        // Factory creates carnivores and herbivores
        _carnivore = _factory.CreateCarnivore();
        _herbivore = _factory.CreateHerbivore();
    }

    /// <summary>
    /// Runs the foodchain, that is, carnivores are eating herbivores.
    /// </summary>
    public void RunFoodChain()
    {
        _carnivore.Eat(_herbivore);
    }
}

4 个答案:

答案 0 :(得分:3)

  

T:IContinentFactory,new()

  1. T必须继承自IContinentFactory
  2. T必须具有无参数构造函数。
  3. 有关new()的更多信息: http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx

答案 1 :(得分:1)

它说T必须是IContinentFactory类型,并且必须有一个空的构造函数。

该代码的好处是:

  • new():您可以访问构造函数并在类中实例化一个新的T。
  • IContinentFactory:使用T对象时,可以访问该界面中声明的所有元素。

答案 2 :(得分:1)

首先,AnimalWorld是一个通用类(T),它应该实现IAnimalWorld接口。

“where”关键字之后是T类型的约束,说T必须实现IContintentFactory并且具有不需要参数的公共构造函数。

答案 3 :(得分:0)

这个类代表一个动物世界。这个世界在大陆上分裂(由T泛型参数表示。)

当您创建新的AnimalWorld时,该类要求您指定您所在的Continent,提供一个具有空构造函数的类(T泛型参数)({{1} }约束)a实现接口new()IContinentFactory)。

我们举个例子:如果IContinentFactory定义如下,AnimalWorld<Europe> = new AnimalWorld<Europe>()将有效:

Europe

除此之外,class Europe : IContinentFactory { // Don't forget the new() constructor Europe() { //...// } // Here IContinentFactory implementation public IHerbivore CreateHerbivore() { //...// } // Here IContinentFactory implementation public ICarnivore CreateCarnivore() { //...// } } 从界面AnimalWorld<T>

派生