Where T:class 泛型类型约束
对于一个定义泛型类型为参数的函数,如果调用时传入的对象为T对象或者为T的子类,在函数体内部如果需要使用T的属性的方法时,我们可以给这个泛型增加约束;
//父类子类的定义
public class ProductEntryInfo
{
[Description("商品编号")]
public int ProductSysNo { get; set; }
//more
}
public class ProductEntryInfoEx : ProductEntryInfo
{
[Description("成份")]
public string Component { get; set; }
//more
}
//方法:
private static string CreateFile<T>(List<T> list) where T:ProductEntryInfo
{
int productSysNo =list[0].ProductSysNo
}
//调用:
List<ProductEntryInfo> peList = new List<ProductEntryInfo>();
string fileName = CreateFile( peList);
List<ProductEntryInfoEx> checkListAll = new List<ProductEntryInfoEx>();
string fileNameEx = CreateFile(checkListAll);
这样就可以实现上边的CreateFile方法了
这样类型参数约束,.NET支持的类型参数约束有以下五种:
where T : struct T必须是一个结构类型
where T : class T必须是一个类(class)类型
where T : new() T必须要有一个无参构造函数
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface | T必须实现名为NameOfInterface的接口
分别提供不同类型的泛型约束。
可以提供类似以下约束
class MyClass<T, U>
where T : class
where U : struct
{ }
