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

 

posted @ 2012-05-07 23:03  MadKeX  阅读(1467)  评论(0)    收藏  举报