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

时间:2012-03-23 15:40:38

标签: c# new-operator

  

可能重复:
  What does new() mean?

喜欢标题。我想知道代码中的这种语法是什么意思。我在一些样本中找到了它,但没有解释,我真的不知道它是做什么的。

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

任何人都可以为我解释一下吗?

3 个答案:

答案 0 :(得分:6)

也许你的意思是你在这些方面看到了什么?

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

这意味着您只能使用具有公共无参数构造函数的类型T的泛型类。这些被称为generic type constraints。即,你不能这样做(见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();
    }
}

答案 1 :(得分:3)

它是generic type constraint,意味着泛型类型必须具有公共无参数构造函数。

您的代码示例甚至无法编译。

正确的语法是:

SomeClass<T> where T : new()

答案 2 :(得分:1)

你没有发布完整的代码行,因为它不会编译,但它是泛型的约束。 Here是MSDN文章。