您当前的位置: 首页 >  c#

C#装箱拆箱

发布时间:2010-11-22 10:21:00 ,浏览量:0

C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声明时初始化才能使用,不能为NULL,而引用类型在堆中分配内存,初始化时默认为NULL。值类型超出作用范围系统自动释放内存,而引用类型是通过垃圾回收机制进行回收。由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以相互转换,而这转换过程也就是所谓的装箱和拆箱。         装箱转换         装箱就是将一个值型变量隐式地转换为引用类型对象,虽然也可以显示转换,但一般都不需要使用到。对值类型进行装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 例如:

class TestBoxing   {     static void Main()     {         int i = 123;         object o = i;  // 隐式装箱                  i = 456;  // 改变i的内容          System.Console.WriteLine("值类型的值为 {0}", i);          System.Console.WriteLine("引用类型的值为 {0}", o);      } }

结果输出: 值类型的值为 456 引用类型的值为 123 装箱操作如下图所示         取消装箱         取消装箱就是从引用类型到值类型的显式转换。取消装箱操作先检查对象实例,确保它是给定值类型的一个装箱值,然后将该值从实例复制到值类型变量中。 例如:

class TestUnboxing {     static void Main()     {         int i = 123;         object o = i;  // 隐式装箱         try         {             int j = (short) o;  // 试着取消装箱                          System.Console.WriteLine("取消装箱成功.");          }         catch (System.InvalidCastException e)         {              System.Console.WriteLine("{0} 错误: 不正确的取消装箱.", e.Message);          }      } }

结果输出: 指定的转换无效。错误:不正确的取消装箱。 要将int j = (short) o 改为int j = (int) o 就会显示取消装箱成功。 取消装箱如图所示:

         在网上查资料的时候在CSDN上看到个解释装箱和拆箱的解释,如下所示:

// “小范围”变量int,“大范围”变量double       int a = 10 ;       double b;       b = a;   // 这叫装箱,“小”的放入“大”的,呵呵       int a;       double b = 10 ;       a = ( int )b;   // 这叫拆箱,“大”的放入“小”的,乱放或放错了可不行哈,呵呵

能把强制类型转换解释成装箱拆箱实在觉得很有趣,就做个反面的例子吧。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    105962博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0487s