当前位置:编程技术网 > 技术文章 > C#2.0 序列教程 > 文章详细内容

C#2.0 序列教程 (1) - 泛型

    熟悉C++的朋友,应该对于模板情有独钟,熟悉c++也不能不知道ATL。当然这个一种高效快捷的编程技术,到了C#里面,做了稍微的修改,有了个新的名字,叫 泛型

 

一、泛型基本概念
泛型代码:调用者能决定代码操作的类型的代码。

 

二、泛型的优点
 1、在C#1.0中,为了代码能通用,可以通过(装箱、拆箱) 通用基类(object)来实现。  但这样的代码只能在运行时抛出类型异常, 不能做到编译时类型安全。   在C#2.0中,可以使用泛型类来创建编译时进行类型安全检查的通用代码。
 2、避免在集合存储值类型数据时装箱拆箱所带来的性能损耗
 3、使用集合可利用intellisense功能。

 


三、泛型的语法
 定义时使用类型占位符(类型参数)
      e.g. :  class DataOperate<T>
       public int ExecuteSql<Tcommand>(string sql)
 调用时用特定类型替代
      e.g. :  new DataOperate<SqlConnection>();
          dao.ExecuteSql<SqlCommand>("delete from Users");

 

四、类型参数的命名
  类型占位符以 T 开头

 

五、泛型 类型参数约束
 5.1  为什么要约束 ?
        编写泛型代码时, 会使用 类型参数所指定类型 的成员,编译器如何知道调用者所指定的 类型 是否支持这些操作呢? 所以需要对泛型的 类型参数 做一定程度的约束。


5.2  如何约束?
  where关键字
 e.g. : class SqlHelper<T> where T : 约束类型  


 5.3  约束分类
 where T : struct  值类型
 where T : class  引用类型
 where T : new() 有无参构造函数
 where T : <类> 必须是此类或其派生类
 where T : <接口> 必须是此接口或其实现类
 where T : T1 裸类型约束,约束类型参数之间的关系
 无约束


 5.4  约束可在不冲突的情况下组合使用

 

六、泛型类 示例
public class SqlHelper<Tconnnection, Tparameter, Tcommand>

    where Tconnnection : DbConnection, new()

    where Tparameter : DbParameter

    where Tcommand : DbCommand, new()

{

    public int ExecuteNonQuery(string connstr, string sql, params Tparameter[] parms)

    {

        using (Tconnnection cn = new Tconnnection())

        {

            cn.ConnectionString = connstr;

            cn.Open();

            Tcommand cmd = new Tcommand();

            cmd.CommandText = sql;

            cmd.Connection = cn;

            foreach (Tparameter p in parms)

                cmd.Parameters.Add(p);

            return cmd.ExecuteNonQuery();

        }

    }

}

 

七、泛型接口 示例
interface IBaseInterface<T> { }

 

八、泛型方法 示例
public string M<T>(T i) where T : struct
{

}
注意: 类型参数的个数也是方法重载的一个新的依据

void DoWork() { }

void DoWork<T>() { }

void DoWork<T, U>() { }

 

九、泛型委托 示例
delegate Trt 委托名<Trt, Tin>(Tin args);

 

十、.Net框架中常用的泛型类 
System.Collections.Generic 命名空间
 List<T>   (ArrayList的泛型实现)
 Dictionary<TKey,TValue>(Hashtable的泛型实现)


 

 

作者|来源:原创(17fx.net)发表于:2009-1-10 16:46:40
上一篇 没有了