有人可以解释以下类声明。我被赋予了一项任务,以了解代码片段并解释其中的部分内容。我对这个班级宣言没有意义。看看你们中是否有人可以提供帮助。
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);
}
}
答案 0 :(得分:3)
T:IContinentFactory,new()
有关new()
的更多信息:
http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx
答案 1 :(得分:1)
它说T必须是IContinentFactory类型,并且必须有一个空的构造函数。
该代码的好处是:
答案 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>