请教msdn上关于拆箱的解释

aiyaooo 2008-03-09 06:22:10
加精
MSDN:
http://msdn2.microsoft.com/zh-cn/library/b95fkada.aspx
要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。尝试取消装箱 null 或对不兼容值类型的引用会导致 InvalidCastException。
---这句话是什么意思?
是说:“只能把以前装箱的转换为引用类型的变量再转换为值类型”吗?
如:int i=10;
object 0=i;//这里的装箱在拆箱前是必要条件么?
int j=(int)o;
...全文
1122 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
老侯 2012-06-18
  • 打赏
  • 举报
回复
mark,学习~~
xianxian060 2011-07-21
  • 打赏
  • 举报
回复
对这块很不了解,学习一下
ggvvcc 2011-05-20
  • 打赏
  • 举报
回复
Learning...
失去乐山贼 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hertcloud 的回复:]

装箱 就像是 你把 手头的 香粉 放到一个盒子里面
别人只能 闻到香味 而并不知道箱子里面是什么

拆箱 就如同 拿去箱子的盖子 别人自然能闻其香也能知其物了
[/Quote]
++++++++
马克88 2010-11-10
  • 打赏
  • 举报
回复
路过学习一下下!!!
youyoubaihehua 2010-11-10
  • 打赏
  • 举报
回复
学习了
玉儿 2010-08-31
  • 打赏
  • 举报
回复
mark
bobocici 2008-10-16
  • 打赏
  • 举报
回复

Int32 i = 100;
Int64 ui = (Int64)(Object)i;

这句话就会出错,呵呵,楼上的正确。
qche111 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aiyaooo 的回复:]
那么:
int i=10;
object 0=i;
double j=(double)o;//这里错误,为什么?
int x=(int)o;
《c#高级编程》:只能把以前装箱的转换为引用类型的变量再转换为值类型?
[/Quote]
以前真没有注意到 拆箱为精度高的值类型也会引发InvalidCastException。

现在才明白:
拆箱的原则:类型兼容
wynlc 2008-07-10
  • 打赏
  • 举报
回复
mark
HenryCCG 2008-05-10
  • 打赏
  • 举报
回复
O 并没有失效
lspwl 2008-04-23
  • 打赏
  • 举报
回复
学习一下!!
「已注销」 2008-04-19
  • 打赏
  • 举报
回复
谈谈我自己对于这两个概念的理解,
装箱是把这个int i这个值类型的值复制放入堆object o中,而拆箱又把堆上面的值放入栈上面的int j中
,在装箱过程中,int i的地址和值一直没有没有变,也就是说它只是把值复制给了o,仅此而已。这个过程完毕,两个对象之间没有任何关系了。
而拆箱过程结束,侧堆上面的O将失效。
int i=10;
object 0=i;//这里的装箱在拆箱前是必要条件么?
int j=(int)o;
那么针对我的理解,拆箱的前提条件是:不能为NULL,这个值类型需为引用类型的子类。
Ivony 2008-03-12
  • 打赏
  • 举报
回复
其实就两个意思

1、取消装箱的东西不能是null
2、取消装箱的东西必须与取消装箱的值类型一致,不论其有没有隐式或显式的类型转换,例如int类型的东西取消装箱的时候只能转换为int而不能是long。

否则引发InvalidCastException。
hertcloud 2008-03-12
  • 打赏
  • 举报
回复
装箱 就像是 你把 手头的 香粉 放到一个盒子里面
别人只能 闻到香味 而并不知道箱子里面是什么

拆箱 就如同 拿去箱子的盖子 别人自然能闻其香也能知其物了
shinaterry 2008-03-10
  • 打赏
  • 举报
回复
是的..
octverve 2008-03-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 aiyaooo 的回复:]
拆箱: 对装箱的对象进行拆箱操作,一个新的值类型对象被 "拷贝" 到本地变量列表中,同时其地址被压入堆栈.
-----------
那么,“对装箱的对象进行拆箱操作”是拆箱的必要操作么?即:要拆箱的对象,必须是先前经过装箱的吗?
[/Quote]
楼主的思维已经麻木了,你冷静的想想……
aiyaooo 2008-03-09
  • 打赏
  • 举报
回复
拆箱: 对装箱的对象进行拆箱操作,一个新的值类型对象被 "拷贝" 到本地变量列表中,同时其地址被压入堆栈.
-----------
那么,“对装箱的对象进行拆箱操作”是拆箱的必要操作么?即:要拆箱的对象,必须是先前经过装箱的吗?
shinaterry 2008-03-09
  • 打赏
  • 举报
回复
拆箱: 对装箱的对象进行拆箱操作,一个新的值类型对象被 "拷贝" 到本地变量列表中,同时其地址被压入堆栈。
aiyaooo 2008-03-09
  • 打赏
  • 举报
回复
那么:
int i=10;
object 0=i;
double j=(double)o;//这里错误,为什么?
int x=(int)o;
《c#高级编程》:只能把以前装箱的转换为引用类型的变量再转换为值类型?
加载更多回复(1)

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧