C# 泛型约束
| 约束 | 说明 |
|---|---|
| T : 结构 | T必须是值类型。可以指定除 Nullable 以外的任何值类型。 |
| T : 类 | T必须是引用类型,包括任何类、接口、委托或数组类型。 |
| T : 接口名称 | T必须继承该接口,并实现其中的所有方法。可以指定多个接口约束。 |
| T : 类名称 | T必须该类本身或者继承其的基类类。 |
| T : new() | T必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。 |
1.结构约束
static void Main(string[] args)
{
List<int> listint = new List<int>();
}
//T : struct 必须是值类型
public class List<T> where T : struct{}
2.类关键字约束
static void Main(string[] args)
{
List<string> liststring = new List<string>();
}
//T : class 必须是引用类型
public class List<T> where T : class {}
3.接口名称约束
static void Main(string[] args)
{
List<B> listB = new List<B>();
}
//T : C 继承接口并实现接口中所有方法
public class List<T> where T : C {}
public interface C
{
bool Init();
}
//B继承接口C,因为C中含有方法,所有需将其全部实现
public class B : C
{
public bool Init()
{
throw new NotImplementedException();
}
}
4.类名称约束
static void Main(string[] args)
{
List<A> listA = new List<A>();
}
//T : A 类本身或其基类
public class List<T> where T : A {}
public class A {}
5.new () 约束
static void Main(string[] args)
{
List<A> listA = new List<A>();
}
//T : A, new() 类本身或其基类,同时要包含无参构造函数
public class List<T> where T : A, new() {}
//默认就有无参构造函数
public class A {}

浙公网安备 33010602011771号