转载自:C#中泛型约束(where)是什么?
T约定:只能是Access类型或者Access的子类型 public class BaseAccess<T> where T : Access { } T约定:T只能传入接口的本身和实现了此接口的类 public class BaseAccess<T> where T : IAggregateRoot { } 引用类型约束演示 public class BaseAccess<T> where T : class { } 值类型约束演示 public class BaseAccess<T> where T : struct { } 构造器约束 public class BaseAccess<T> where T : new() { MongoContextAdapter _context; public BaseAccess(MongoContextAdapter context) { this._context = context; } } 一个类型占位符有两个约束 必须是引用类型,必须提供构造函数 public class BaseAccess<T> where T : class,new() { } K必须约定是一个引用类型 V必须约定是一个值类型 public class BaseAccess<K, V> where K : class,new() where V : struct { } /// 泛型参数K必须继承V K,V必须是引用类型,必须提供构造函数 public class BaseAccess<K, V> where K : V where K : class,new() where V : class,new() { } T约定:只能是Access类型或者Access的子类型 public class BaseAccess<T> where T : Access { } T约定:T只能传入接口的本身和实现了此接口的类 public class BaseAccess<T> where T : IAggregateRoot { } 引用类型约束演示 public class BaseAccess<T> where T : class { } 值类型约束演示 public class BaseAccess<T> where T : struct { } 构造器约束 public class BaseAccess<T> where T : new() { MongoContextAdapter _context; public BaseAccess(MongoContextAdapter context) { this._context = context; } } 一个类型占位符有两个约束 必须是引用类型,必须提供构造函数 public class BaseAccess<T> where T : class,new() { } K必须约定是一个引用类型 V必须约定是一个值类型 public class BaseAccess<K, V> where K : class,new() where V : struct { } /// 泛型参数K必须继承V K,V必须是引用类型,必须提供构造函数 public class BaseAccess<K, V> where K : V where K : class,new() where V : class,new() { }