Compiler Error CS0304
变量类型“type”没有 new() 约束,因此无法创建该类型的实例
如果实现泛型类,并且需要使用 new 关键字来创建为类型参数 T 提供的任何类型的新实例,则必须在类声明中将 new() 约束应用于 T,如下面的示例所示。
class C<T> where T : new()
new() 约束将通过确保为 T 提供的任何具体类型都具有默认值(无参数构造函数)来实施类型安全。如果您在 T 未指定 new() 约束时尝试在类的正文中使用 new 运算符创建类型参数 T 的实例,将出现 CS0304。在客户端,如果代码尝试使用没有默认构造函数的类型实例化泛型类,则该代码将生成 Compiler Error CS0310。
下面的示例会生成 CS0304。
// CS0304.cs
// Compile with: /target:library.
class C<T>
{
// The following line generates CS0304.
T t = new T();
}
该类的方法中也不允许使用 new 运算符。
// Compile with: /target:library.
class C<T>
{
public void ExampleMethod()
{
// The following line generates CS0304.
T t = new T();
}
}
若要避免该错误,请使用 new() 约束声明类,如下面的示例所示。
// Compile with: /target:library.
class C<T> where T : new()
{
T t = new T();
public void ExampleMethod()
{
T t = new T();
}
}