就是说T必须是一个类(class)类型,不能是结构(structure)类型。
这是类型参数约束,.NET支持的类型参数约束有以下五种:
where T : struct | T必须是一个结构类型
where T : class
where T : new() | T必须要有一个无参构造函数
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface | T必须实现名为NameOfInterface的接口
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
以下例子的意思是声明了一个叫做Assemble<T>的泛型类,然后T的限制为必须要有一个无参构造器。
public class Assemble<T> where T:new() { public string SayHello<T> (T object) { T ass=new T(); return ass.ToString(); } } public class legal { public legal(){} } public class notlegal { public notlegal(string someting) {} } 当声明Assemble<legal> ass=new Assemble<legal>();时相当于声明了一个Assemble<T>,其中第一个代码端中的T全部替换为legal。当声明Assemble<notlegal> ass=new Assemble<notlegal>();时,由于Assemble<T>中T要求必须具有无参构造器,所以,这句话会报错。