基类约束:表明对T进行初始化,只能是该基类类型或者该基类的子类
格式:<T> where T:baseClass
注意:只能有一个baseClass
接口约束:表明对T进行初始化,只能是该接口类型或者该接口的子类
格式:<T> where T:Interface
注意:可以基类与接口同时存在,可以多个接口,先指定基类再指定接口,用“,”分开
构造函数约束(new()):表明对T进行初始化,类型实参必须有一个无参的构造函数,否则没有无参构造函数的话报错
格式:<T> where T:new()
注意:new()和其他约束同时出现,必须把new()放到末尾;不能和值约束同时出现
引用约束:表明对T进行初始化,类型实参必须是引用类型
格式:<T> where T:class
值约束:表明对T进行初始化,类型实参必须是值类型
格式:<T> where T:struct
组合约束:上面约束同时出现,用逗号分隔
注意:
1、约束列表第一个约束必须是引用或值或基类约束
2、第二位开始写接口约束
3、最后为new()约束
当泛型中出现多个类型形参<T,M>,分别使用where进行约束
泛型委托: