C#的装箱与拆箱


装箱(boxing)和拆箱(unboxing)是.NET提出得新概念!我们知道C#的所有类型都是由基类System.Object派生来的。如果在声明这些数据类型的时候都在堆(HEAP)中分配内存,会造成极低的效率。
为了解决这个问题,.NET的值类型在栈中分配内存,而引用型是在堆中分配内存,初始化为null,引用类型是需要通过垃圾回收器来回收内存,而值类型超过其作用域,就会失效。
有时我们需要将一个值类型转换为引用类型,而有时又需要把引用类型转换为值类型,有人把这种操作分别称之为装箱操作和拆箱操作。
即,装箱操作是指把一个值类型的数据转换为对象类型的,如:
        using  System;
               class class1
               {
                      static void Main()
                      {
                             int a=0;
                             object obj = i;
                             .......
                      }
                }
上面的代码中,object obj = i;就是一个装箱操作,它把一个值类型,即int型的数据隐式转换为对象类型。
拆箱就是将一个引用类型的对象转换成值类型!比如:
        int a=0;
               object obj=a;    //装箱操作
               int b=(int)obj;  //拆箱操作
 从以上的操作过程中,我们看到装箱操作是一种隐式数据类型转换,是自动进行的,而拆箱操作是一种显示的数据类型转换,需要强制进行。
更深入的探讨,大家可以看下面的两篇文章。
http://www.cnblogs.com/qunews/archive/2007/10/03/913349.html
http://blog.csdn.net/gsky/archive/2008/03/27/2222423.aspx
(本文写作过程中,参考了http://life.netskycn.com/htm_data/11/0808/2230.html中的内容)
本文为自己原创,请勿转载。如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com
本文来源于翔宇亭IT乐园( http://www.biye5u.com/) , 原文地址:http://www.biye5u.com/article/Csharp/jichu/2010/2021.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值