New 约束
new 约束指定泛型类声明中的类型实参必须有公共的无参数构造函数。 若要使用 new 约束,则该类型不能为抽象类型。
class ItemFactory<T> where T : new()
{
public T GetNewItem()
{
return new T();
}
}
new 关键字还可用于创建类型的实例或用作成员声明修饰符。
Where 约束
泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。 约束可指定接口、基类或要求泛型类型为引用、值或非托管类型。 它们声明类型参数必须具备的功能。
// 声明一个泛型类 AGenericClass,以使类型参数 T 实现 IComparable<T> 接口
public class AGenericClass<T> where T : IComparable<T> { }