现在的位置: 首页 > 综合 > 正文

C#中的泛型是什么?

2013年01月30日 ⁄ 综合 ⁄ 共 593字 ⁄ 字号 评论关闭

 

     本节内容参考《你必须知道的.NET》和《C#高级编程(第四版)》

 

一、解析泛型

      泛型其实主要是为了实现代码的重用,那么它是如何实现的呢?在CLR2.0中,实现了专门的IL指令支持泛型操作,具体编译过程为:

    (1)初次编译,首先生成IL代码和元数据,T只是作为类型占位符,不进行泛型类型的实例化。

    (2)JIT编译,将以实际类型替换IL代码和元数据中的T占位符,并将其转换为本地代码,下一次对该泛型类型的引用将使用相同的本的代码。

     注意:对于值类型和引用类型参数,泛型类型实例化有所不同。 

    (1)类型参数为值类型,JIT编译器为不同的值类型创建不同的本地代码

    (2)类型参数为引用类型,共享本地代码的单个副本,这主要是因为引用类型变量都是指向托管堆的引用指针,对于指针完全可以使用相同的方式来操作。

 

二、基础概要

     1、默认值

     public T data; data = default(T);值类型的默认值为0,引用类型的默认值为null。对于结构类型,初始化为其成员相应的默认值。

 

     2、约束

     在定义泛型类时,对于能够用于实例化类型参数的类型所作的限制。

    (1)T:new(),表示类型参数必须具有公共无参构造函数。当有多个约束存在时,new()约束置于最后。

    (2)T:Class,表示类型参数必须是引用类型。

 

 

 

 

抱歉!评论已关闭.