轉載自: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() { }