“T:new()”对泛型有什么意义?

时间:2013-02-17 19:37:30

标签: c# generics

我想了解那段代码。我认为T必须是IContinentFactory's已实施的课程,但我不理解new()关键字的结尾。

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

4 个答案:

答案 0 :(得分:6)

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

您实际上指定可以在T param = new T();

的实现中编写AnimalWorld<T>

答案 1 :(得分:5)

new()表示T必须具有默认(无参数)ctor。

<强> Constraints on Type Parameters (C# Programming Guide)

答案 2 :(得分:4)

约束new()表示类型T必须具有公共无参数实例构造函数。这包括所有值类型,但不包括所有类。没有接口或委托类型可以有这样的构造函数。当存在new()约束时,T永远不能成为抽象类。

new()存在时,类中允许使用以下代码:

T instance = new T();

答案 3 :(得分:3)

class AnimalWorld<T> : IAnimalWorld where T : IContinentFactory, new()

声明的含义如下:

  • AnimalWorldclass,其泛型类型参数为T
  • 课程AnimalWorld必须实施IAnimalWorld
  • 类型参数T必须实现IContinentFactory
  • 类型参数T的类必须具有无参数构造函数(这是new的用途)。