一、.NET中支持的类型参数约束有以下几种
where T : struct T必须是一个结构类型
where T : class T必须是一个类(class)类型,不能是结构(structure)类型
where T : new() T必须要有一个无参构造函数
where T : NameOfBaseClass T必须继承名为NameOfBaseClass的类
where T : NameOfInterface T必须实现名为NameOfInterface的接口
二、泛型中new()约束基本形式
class A<T> where T : new()
三、泛型中new()约束实例
public class A<T> where :class,new()
{
public void Func()
{
T t=new T();
}
}
//泛型类T的一个实现类Test
public class Test
{
public Test(int a)
{
}
}
此时不能编译通过
解决方案:在Test类中加入无参构造函数即可。
四、泛型中new()约束的注意事项
1、泛型定义中有new()约束关键字时,表示必须有一个公共的无参的构造函数。简单点说就是你传递一个类代替T的时候,这个类必须有一个构造函数,且必须是公共的无参的。
2、当有多个约束时候,new()关键字必须放到坐后面。
3、在使用new()约束时,可以通过调用该无参构造函数来创建对象。
五、多个泛型类型参数
对于多个类型参数,每个类型参数都使用一个 where 子句
class Dictionary<TKey, TVal>
where TKey : IComparable, IEnumerable,new()
where TVal : IMyInterface,new()
{
public void Add(TKey key, TVal val)
{
}
}