欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅析.NET泛型

程序员文章站 2024-01-05 15:34:52
泛型是.NET Framework 2.0最强大的功能,通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高性能并得到更高质量的代码。在.NET Framework 2.0之前,没有泛型的时候,经常使用的是数组,但是这样的话避免不了的会产生拆箱和装箱的操作。 ......

      泛型是.NET Framework 2.0最强大的功能,通过泛型可以定义类型安全的数据结构,而没有必要使用实际的数据类型,这将显著提高性能并得到更高质量的代码。在.NET Framework 2.0之前,没有泛型的时候,经常使用的是数组,但是这样的话避免不了的会产生拆箱和装箱的操作。

      泛型在IL(中间语言)和CLR本身中都支持,在编译泛型C#代码时,首先编译器会将其编译为IL,就像其他任何类型一样。从.NET编译层面来讲,大体分为两次编译,一次是语言层面的编译,也就是把C#或VB语言编程成IL中间语言,第二次编译JIT(即时编译),这时候是把IL中间语言编程成机器码,具体的可以查看《CLR via C》和《程序员的自我修养--链接、装载与库》这两本书,对于泛型 IL只包含实际特定类型的参数或占位符,并有专用的IL指令支持泛型操作。真正的泛型实例化工作以“on-demand”的方式,发生在 JIT 编译时。当进行JIT 编译时,JIT 编译器用指定的类型实参来替换泛型 IL 代码元数据中的 T,进行泛型类型的实例化。这会向JIT编译器提供类型特定的IL元数据定义,就好像从未涉及到泛型一样。简单来讲就是在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地代码,这个本地代码中已经使用了实际的数据类型,等同于用实际类型写的类。这点上要比Java的擦除法的伪泛型要强很多。再说下元数据,这个东西在在编译成IL中间语言时候它就有了,它是一个二进制数据块,由几个表组成,大致包含的信息就是源代码中的类型、字段、方法、属性和事件,其实在用visual studio开发的时候,可能很多人可能都没有留意,VS的智能提示其实都是靠编译后的元数据来提示的,包括反射都是用的元数据。

     以上就是对.NET泛型的简单说明,如有什么问题,可以关注我的微信公众号反馈给我,我也会尽量的在那上面分享一些技术文章。以上详细知识可以参考《C#数据结构》《CLR via C》和《程序员的自我修养--链接、装载与库》这三本书。