我试过了:
int i = 5;
object o1 = i; // boxing the i into object (so it should be a reference type)
object o2 = o1; // set object reference o2 to o1 (so o1 and o2 point to same place at the heap)
o2 = 8; // put 8 to at the place at the heap where o2 points
运行此代码后,o1中的值仍为5,但我期望为8。
我想念什么吗?
最佳答案
这不是C#中变量的工作方式。它与装箱值类型无关。
考虑一下:
object o1 = new object();
object o2 = o1;
o2 = new object();
您为什么期望
o1
和o2
包含对同一对象的引用?设置o2 = o1
时,它们是相同的,但是一旦设置o2 = new object()
,o2
的值(变量指向的内存位置)就会改变。也许您想要做的事情可以像这样完成:
class Obj {
public int Val;
}
void Main() {
Obj o1 = new Obj();
o1.Val = 5;
Obj o2 = o1;
o2.Val = 8;
}
在
Main
的末尾,Val
的o1
属性将包含8
。关于c# - 如何从int引用类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13651543/