c#泛型类型的约束条件where
原文地址:http://www.189works.com/article-40359-1.html
由于泛型可以接受用户定义的类型,为了给用户定义的类型做限定,需要在声明该泛型类时用where作一些限制
class 泛型类型<T> where T : 约束条件
{
  /*----*/
}
通过这样的限定,就限制用户在声明泛型类型时可使用的类型T
using System; using System.Collections.Generic; using System.Text; using System.Data.Common; using Dare.Utilities.Data; using Dare.DN.Components; using System.Data; using log4net.Core; namespace Dare.DN.Data { public abstract class DataProviderTemplate<Entity, Key> : DataProviderBase where Entity : class, IEntity, IEntity<Key>,new() where Key : struct { /*----*/ } } //这里可见所设定的泛型的类型参数的名称可以自定,这里设为<Entity, Key>,并且各个限定条件用,号分隔开来
摘要:
泛型约束基本上有五种:
- 值类型约束:要求泛型参数必须是值类型,例如int,short以及自定义的stuct等
 
public class MyClass2<T>
where T : struct//这个泛型类只接受值类型的泛型参数
{
}
- 引用类型约束:要求泛型参数必须是引用类型,例如string,object,以及自定义的class
 
public class MyClass<T>
where T:class//这个泛型类只接受引用类型的泛型参数
{
}
- 构造函数约束:要求泛型参数必须有构造函数
 
public class MyClass3<T>
where T : new()
{
}
- 接口约束:要求泛型参数必须实现某个接口
 
public class MyClass4<T>
where T : System.IComparable
{
}
- 基类约束:要求泛型参数必须继承某个基类
 
public class MyClass5<T>
where T : Customer
{
}
                    
                
                
            
        
浙公网安备 33010602011771号