2013-02-17 42 views
2

我想了解该代码。我认为T必须是IContinentFactory's实施的类,但我不明白new()关键字结束。“T:new()”对泛型有什么意义?

class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new() 
{ 
..... 
} 
+8

[MSDN](http://msdn.microsoft.com/zh-cn/library/sd2w2ew5(v = vs.110).aspx) – 2013-02-17 19:39:02

+0

(此处没有通用接口,其他接口只是噪音围绕真正的问题。) – 2013-02-17 20:15:25

+0

作为一个微妙的考虑与给出的答案:'struct's也满足'new()'约束。关于struct是否实际上有一个公共无参数构造函数是一个有趣的问题 - 而且IIRC C#和CLI规范在这个问题上不一致:但关键的是:'struct'始终满足这个约束。 – 2013-02-17 20:32:12

回答

6

T: new()表示类型T必须具有无参数构造函数。

通过,你实际上指定您可以在执行AnimalWorld<T>

+0

+1只有在回答中提到约束条件允许使用'T'的代码执行其他方式无法执行的操作。 – supercat 2013-02-18 17:14:12

4

约束new()即开型T必须有一个公共的无参数构造函数。这包括所有的值类型,但不是所有的类。没有接口或委托类型可以有这样的构造函数。当存在new()约束时,T永远不可能是抽象类。

new()存在时,下面的代码是允许的类中:

T instance = new T(); 
3
class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new() 

这里是声明意味着:

  • AnimalWorldclass与通用类型参数T
  • AnimalWorld必须执行换货IAnimalWorld
  • 类型参数T必须实现IContinentFactory
  • 类的类型参数T必须有一个无参数的构造函数(这是什么new是)。