来源:http://www.cnblogs.com/FredWang/p/4284251.html
class A<T> where T:new() ===》》》 where后的称为泛型约束 这里约束泛型参数T必须具有无参的构造函数
这是类型参数约束,where表明了对类型变量T的约束关系。where T:A 表示类型变量是继承于A的,或者是A本省。where T: new()指明了创建T的实例应该使用的构造函数。
.NET支持的类型参数约束有以下五种:
where T: struct T必须是一个结构类型
where T: class T必须是一个类(class)类型
where T: new() T必须要有一个无参构造函数
where T: NameOfBaseClass T必须继承名为NameOfBaseClass的类
where T: NameOfInterface T必须实现名为NameOfInterface的接口
where 泛型约束:
定义:在定义泛型的时候,我们可以使用 where 限制参数的范围。
使用:在使用泛型的时候,你必须尊守 where 限制参数的范围,否则编译不会通过
在实际项目中什么时候用到它们?
有时候你在做一个项目的时候,你需要用到泛型,你只希望传给你的泛型参数是限定范围的,
比如你希望值类型,或者是引用类型,或者是继承至某个类型、或者是符合某个接扣的类型,
这个时候你该如何办?你就需要用到 WHERE 来限定了。
参考MSDN原文
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。这些限制称为约束。约束是使用 where 上下文关键字指定的。T:new() 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时, new() 约束必须最后指定。