关于“关于C#装箱的疑问”帖子的个人看法
来源:互联网 发布:网络零售的理解 编辑:程序博客网 时间:2024/06/18 04:41
昨天晚上闲着无事,就上csdn逛了一下,突然发现一个帖子很有意思,就点进去看了一下。
楼主的问题很精辟
int a = 1;
object b=a;
object c = b;
c = 2;
为什么b不会变成2呢?b和c应该指向堆里面的同一个引用啊?
大神们的回答也让我深思,这里就把自己的理解写出来,如果有误,还请告知。
本文参考:IL指令详细 、 大內高手專欄:.NET中間語言(IL)
本文测试代码:
static void Main() { int a = 1; object b = a; object c = b; c = 2; }
使用ildasm.exe查看结果:
增加注释:
我对于IL代码的自己理解思路:
1、Idc.i4.1、 stloc.0 ==> int a = 1;2、Idloc.0、 box[mscorlib]System.Int32、 stloc.1 ==> object b = a;(b指向在堆栈上新建对象值为1,与a无任何联系)3、Idloc.1、 stloc.2 ==> object c = b;4、Idc.i4.2、 box[mscorlib]System.Int32、 stloc.2 ==> c = 2;(c指向堆栈上新建对象值为2)
①对于2、4 可参考装箱和取消装箱(C# 编程指南)装箱部分内容
②对于3处,我理解是:b、c指向堆栈上同一个对象,帖子中12楼impasse这位仁兄回答也证实了这一点。
③测试过程中我发现当我改变b中对象值时,c不改变。我认为此时,当改变b对象后,已经在堆栈上新建对象,b指向此对象,而此时b,c不同。此处与class类型不同。
以上就是本人的一些看法,如果有误,还请告知。想看更多回答请移步正贴,博客开头有正贴链接。
阅读全文
0 0
- 关于“关于C#装箱的疑问”帖子的个人看法
- 关于treeview 的个人看法
- 关于职业生涯的个人看法
- 关于VJ 的个人看法
- 个人关于数据结构的看法
- 关于STL的个人看法
- 关于C#与C/C++的个人看法
- 关于BCB,VC的一点个人看法
- 谈点关于SmartClient的个人看法。
- 关于电子商务平台的发展及个人看法
- 关于墓地我个人的看法。
- 关于J2EE学习的书籍,个人看法
- 关于管理的一点个人看法
- 关于Ext的一些个人看法
- 个人关于chrome浏览器的一些看法
- 关于换工作的个人看法
- 关于汇编语言位图的个人看法
- 关于内核学习的一些个人看法!
- (24)连接池与分页
- 动态规划-650. 2 Keys Keyboard
- 试试水
- program
- 游戏开发思想-模块化
- 关于“关于C#装箱的疑问”帖子的个人看法
- codeforces 294C组合数学)
- Selenium 使用 Selenium+PhantomJS 以静默方式完成前端页面 UI 自动化测试
- 自动生成hibernate配置文件和对象关系映射文件
- 字符设备和块设备的区别
- C#--WinForm修改模块--实现学员信息的修改
- 大数阶乘取模
- C#中Winfrom窗体关闭方法的总结
- java学习总结(四)