日期:2014-05-20  浏览次数:20692 次

请教msdn上关于拆箱的解释
MSDN:
http://msdn2.microsoft.com/zh-cn/library/b95fkada.aspx
要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。尝试取消装箱 null 或对不兼容值类型的引用会导致 InvalidCastException。
  ---这句话是什么意思?
  是说:“只能把以前装箱的转换为引用类型的变量再转换为值类型”吗?
  如:int i=10;
  object 0=i;//这里的装箱在拆箱前是必要条件么?
  int j=(int)o;

------解决方案--------------------
C#中值类型的默认值是0,引用类型的默认值是null。如果你把一个引用类型为null的object对象通过拆箱
转换为值类型的int,这就会出现错误,因为值类型不能定义为null。
上面话的意思是所拆箱前类型必须能隐式或显示转换为拆箱后的类型,否则就会导致InvalidCastException。
------解决方案--------------------
拆箱: 对装箱的对象进行拆箱操作,一个新的值类型对象被 "拷贝" 到本地变量列表中,同时其地址被压入堆栈。
------解决方案--------------------
探讨
拆箱: 对装箱的对象进行拆箱操作,一个新的值类型对象被 "拷贝" 到本地变量列表中,同时其地址被压入堆栈.
-----------
那么,“对装箱的对象进行拆箱操作”是拆箱的必要操作么?即:要拆箱的对象,必须是先前经过装箱的吗?