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