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 {}