我想了解该代码。我认为T
必须是IContinentFactory's
实施的类,但我不明白new()
关键字结束。“T:new()”对泛型有什么意义?
class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new()
{
.....
}
我想了解该代码。我认为T
必须是IContinentFactory's
实施的类,但我不明白new()
关键字结束。“T:new()”对泛型有什么意义?
class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new()
{
.....
}
new()
写T param = new T();
意味着T
必须有默认的(无参数)构造函数。
T: new()
表示类型T必须具有无参数构造函数。
通过,你实际上指定您可以在执行AnimalWorld<T>
+1只有在回答中提到约束条件允许使用'T'的代码执行其他方式无法执行的操作。 – supercat 2013-02-18 17:14:12
约束new()
即开型T
必须有一个公共的无参数构造函数。这包括所有的值类型,但不是所有的类。没有接口或委托类型可以有这样的构造函数。当存在new()
约束时,T
永远不可能是抽象类。
当new()
存在时,下面的代码是允许的类中:
T instance = new T();
class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new()
这里是声明意味着:
AnimalWorld
是class
与通用类型参数T
AnimalWorld
必须执行换货IAnimalWorld
T
必须实现IContinentFactory
T
必须有一个无参数的构造函数(这是什么new
是)。
[MSDN](http://msdn.microsoft.com/zh-cn/library/sd2w2ew5(v = vs.110).aspx) – 2013-02-17 19:39:02
(此处没有通用接口,其他接口只是噪音围绕真正的问题。) – 2013-02-17 20:15:25
作为一个微妙的考虑与给出的答案:'struct's也满足'new()'约束。关于struct是否实际上有一个公共无参数构造函数是一个有趣的问题 - 而且IIRC C#和CLI规范在这个问题上不一致:但关键的是:'struct'始终满足这个约束。 – 2013-02-17 20:32:12