思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.net 中的装箱与拆箱

Posted on 2010-01-19 00:13  szh114  阅读(330)  评论(0编辑  收藏  举报

    .net中的类型被分成了两类:Value Type跟Reference Type,并且在其中设计了一个机制就是所有的类型都是继承自一个根类:System.Object,这个跟MFC中所有的类都继承自CObject好像有点类似。

     值类型实例的特点在于它是一般直接被分配在栈上的,通过其地址来引用。而当我们要分配一个引用类型的实例时,先在堆中创建这个实例存放区域,然后在栈中放一个变量,来存储该区域的地址。我们的引用实例,实际上是这个地址值,而不是堆中那一块存储空间。目前来说,我还没有领会到这种设计方式的好处在哪儿。

    至于装箱,拆箱,就是将值类型的基本类型与System.Object类之间进行互相转换,为什么要设计这种可以进行转换的机制呢,我想目的就是为了让一个接受Object对象类型的函数,不仅仅能够接受常见的类引用对象,而且可以接受普通的值类型对象。而如果就为了这个效果,将所有的基本类型设计为引用类型,那么从执行效果上来说,是要更费事的,毕竟一个int变量,你不直接操纵它,而要绕个弯通过它的地址来操作,又费空间又费时间。所以就设计了这么一种途径。