C#中的继承,T:new()的含义是什么

本文关键字:是什么 new 继承 | 更新日期: 2023-09-27 18:29:01

可能重复:
new()是什么意思?

就像标题一样。我想知道代码中的语法是什么意思。我在一些样品中发现了它,但没有解释,我真的不知道它是干什么的。

public class SomeClass<T> where T: new()  // what does it mean?

有人能为我解释一下吗?

C#中的继承,T:new()的含义是什么

也许你的意思是你看到了沿着这些线的东西?

public class SomeClass<T> where T: new() 
{...}

这意味着您只能使用具有公共无参数构造函数的类型T的泛型类。这些被称为泛型类型约束。也就是说,你不能这样做(见CS0310):

// causes CS0310 because XmlWriter cannot be instantiated with paraless ctor
var someClass = new SomeClass<XmlWriter>();
// causes same compile error for same reason
var someClass = new SomeClass<string>();

你为什么需要这样的约束?假设您想实例化一个类型为T的新变量。只有当您有这个约束时,才能这样做,否则,编译器无法事先知道实例化是否有效。即:

public class SomeClass<T> where T: new() 
{
    public static T CreateNewT()
    {
         // you can only write "new T()" when you also have "where T: new()"
         return new T();
    }
}

它是一个泛型类型约束,意味着泛型类型必须有一个公共的无参数构造函数。

您的代码示例甚至不会编译。

正确的语法是:

SomeClass<T> where T : new()

您还没有发布完整的代码行,因为这不会编译,但这是泛型中的一个约束。这是MSDN的文章。