日期:2014-05-18  浏览次数:20521 次

研究拆箱装箱遇到的问题
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++中的指针)