读书人

研究拆箱装箱遇到的有关问题

发布时间: 2011-12-29 22:09:38 作者: rapoo

研究拆箱装箱遇到的问题
string s = "1 "; //内存堆中的一块空间,地址1
Object o = s;  //内存堆中一块新空间地址2,存放一个指针指向地址1
Object o1 = o; //内存中一块新空间地址3,存放一个指针,指向地址2
o = "2 "; //内存中一块新空间地址4,目前没有其他指针指向这个地址

按如上理解对吗?按以上o1应该还等于 "1 ",其实我希望如下

在内存堆中有一个字符串 "aaa ",然后在内存堆中开辟一个新空间,指向 "aaa "这个空间,我希望当 "aaa "改变为 "bbb "时,新空间显示的值也会改变为 "bbb ",类似于指针,应该如何操作,

[解决办法]
装箱和拆箱其实就是值类型和Object类型之间的转换。如:装箱时候值类型转变为Object类型,其实是值类型的一个副本而已,所以副本的改变不会影响原值!
如果你要实现副本改变原值的情况,要使用引用类型!C#分为值类型和引用类型,引用类型可以做到这个效果!
[解决办法]
你的代码没有 拆箱装箱 过程 System.String 就是引用类型


我希望当 "aaa "改变为 "bbb "时,新空间显示的值也会改变为 "bbb "

========

传递参数是用 ref / out 关键字

void RefParamSampleFoo(ref string str) {
str += "hello ";
}



[解决办法]
在内存堆中有一个字符串 "aaa ",然后在内存堆中开辟一个新空间,指向 "aaa "这个空间,我希望当 "aaa "改变为 "bbb "时,新空间显示的值也会改变为 "bbb ",类似于指针,应该如何操作,
--------------
这个就是引用类型,或者用ref或out(相当于C++中的指针)

读书人网 >asp.net

热点推荐