装箱与拆箱
目录
生活中的装箱与拆箱
C# 的装箱与拆箱
值类型和引用类型
装箱
拆箱
生活中的装箱与拆箱
我们习惯了在网上购物,这次你想买本编程书 -- 《C 语言从入门到放弃》 ,下单成功后,卖家会帮你将这本入坑指南打好包装,我们可以称之为装箱;经过快递员的快马加鞭,风雨无阻,包裹就直接送到你手上了。你一定会以迅雷不及掩耳盗铃儿响叮当之势拆开包装,这个过程我们可以称之为拆箱,这时,入坑指南就顺利的送到你手上。

C# 的装箱与拆箱
装箱:将值类型(如 int ,或自定义的值类型等)转换成 object 或者接口类型的一个过程。当 CLR 对值类型进行装箱时,会将该值包装为 System.Object 类型,再将包装后的对象存储在堆上。 拆箱就是从对象中提取对应的值类型的一个过程。
装拆箱就是一个相反的过程。装箱是隐式的;拆箱必定是显式的。
相对于简单的赋值而言,装箱和拆箱都需要进行大量的数据计算。对值类型进行装箱时,CLR 必须重新分配一个新的对象。拆箱所需的强制转换也需要进行大量的计算,只是相比,程度不高,并且也可能会出现类型转换的异常情形。如果你的操作正处于循环的中心,通过测试(如:Stopwatch),你会很明显的感觉到性能问题。
.NET 2.0 引入的泛型其实在很大的程度上解决了装拆箱产生的类型转换问题,也减少了类型转换所引起的运行时的异常,从而提高了性能。
static void Main(string[] args)

