我注意到有人在C#中做过这件事 - 注意新的()
public class MyClass<T> where T: new(){
//etc
}
这实现了什么?
答案 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()
子句的情况下生成编译器错误。