现在的位置: 首页 > 综合 > 正文

C#中的装箱和拆箱(boxing and unboxing)

2012年12月27日 ⁄ 综合 ⁄ 共 612字 ⁄ 字号 评论关闭

重新认识C#,记录点点滴滴

C#中的装箱和拆箱操作指的分别是把值类型转换成引用类型(装箱)和吧引用类型转换成值类型(unboxing)。

装箱用于描述把一个值类型转换成引用类型,运行库会在堆上为该对象创建一个临时的引用类型的“箱子”。改装换可以隐式地进行,如下所示:

   1: int myInt = 10;

   2:  

   3: object myObj = myInt;

拆箱用于描述相反的过程,该操作将装箱的值类型强制转换回原来的引用类型。这个转换必须使用显式的强制转换。其语法类似于显式的类型转换,如下所示:

   1: int myInt = 20;

   2:  

   3: object myObj = myInt;

   4:  

   5: int mySecondInt = (int)myObj;

拆箱操作只能对以前装箱的变量进行拆箱。当myObj不是装箱后的int型时,如果代码中将其强制转换成int将会在运行期间抛出异常。

 

同时,在拆箱操作时必须确保得到的值变量有足够的空间存储拆箱的值的所有字节。

例如: C#的int是32位的long是64位的,所以把long值拆箱为int时会导致一个InvaildCastException异常。如下:

   1: long myLong = 999888777;

   2:  

   3: object myObj = myLong;

   4:  

   5: int myInt = (int)myObj;  //InvaildCastException

   6:  

Technorati 标签: ,,,,

抱歉!评论已关闭.