Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新实例的泛型类型实现了什么?_C#_.net_Generics - Fatal编程技术网

C# 新实例的泛型类型实现了什么?

C# 新实例的泛型类型实现了什么?,c#,.net,generics,C#,.net,Generics,我注意到有人在C#中这样做了-注意新的() 公共类MyClass,其中T:new(){ //等 } 这能实现什么 这意味着T必须有一个公共的无参数构造函数。例如(在MSDN之外),必须可以创建以下新的T对象: class ItemFactory<T> where T : new() { public T GetNewItem() { return new T(); } } 类ItemFactory,其中T:new() { 公共T GetNe

我注意到有人在C#中这样做了-注意新的()

公共类MyClass,其中T:new(){
//等
}

这能实现什么

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

class ItemFactory<T> where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}
类ItemFactory,其中T:new()
{
公共T GetNewItem()
{
返回新的T();
}
}

有关更多信息,请参阅MSDN中的。

这将限制泛型
MyClass
仅适用于具有可用无参数构造函数的
T
实例。这允许您在类型中安全地使用以下表达式

new T()

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

它允许您键入:

T obj = new T();

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

。这对我的帮助比我想象的要多
T obj = new T();