.NET进阶篇-语言章-1-Generic泛型深入
内容目录 一、概述 二、泛型的好处 三、泛型使用 1、泛型方法 2、泛型类、泛型接口 四、泛型的功能 1、泛型中的默认值 2、约束 3、协变逆变 5、泛型委托 4、泛型缓存 五、总结 一、概述 泛型我们一定都用过,最常见的List<T>集合。.NET2.0开始支持泛型,创建的目的就是为了 不同类型创建相同的方法或类,也包括接口,委托的泛型 。比如常见的ORM映射,一个方法通过传入不同的类,返回不同的类实例,再调用时才确定参数类型。 我们知道想要一个类相同名称的方法,如果仅参数类型不同,那么要重载。重载会有很多冗余的代码。在.NET1.0时代也可以不用重载,那就是参数类型直接用Object类型,那么任何类型都能传进去了,但是会有装箱拆箱操作,影响性能。 二、泛型的好处 值类型和引用类型的装箱拆箱消耗。 值类型分配在线程栈上,引用类型分配在堆上,只把指针放在栈上 。如图所示,如果把int类型1装箱,就要把1拷贝到堆中,就会有内存的交换。以前的ArrayList就是类型不安全的,需要频繁的进行装拆箱操作,Add元素的时候全部装箱object,取的时候要拆箱,性能损失比较大。 泛型的效率等同于硬编码的方式,就是和你很多功能相同的类效率差不多。泛型每个类型只实例化一次,下面泛型缓存会详细解读下。先简单介绍下CLR的运行原理(详细在CLR章节)以了解泛型的原理机制。