新实例的通用类型实现了什么?

时间:2010-11-03 17:55:04

标签: c# .net generics

我注意到有人在C#中做过这件事 - 注意新的()

public class MyClass<T> where T: new(){

//etc

}

这实现了什么?

3 个答案:

答案 0 :(得分:10)

这会将通用MyClass<T>限制为仅与具有可用无参数构造函数的T实例一起使用。这允许您在类型

中安全地使用以下表达式
new T()

如果没有new约束,则不允许这样做,因为CLR无法验证类型T是否具有适用的构造函数。

答案 1 :(得分:4)

这意味着T必须具有公共无参数构造函数。例如(在MSDN之外),必须创建以下新T对象:

class ItemFactory<T> where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}

有关详细信息,请参阅MSDN中的new constraint

答案 2 :(得分:1)

它可以让您输入:

T obj = new T();

会在没有new()子句的情况下生成编译器错误。