我试过了:
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
Run Code Online (Sandbox Code Playgroud)
运行此代码后,o1中的值仍为5,但我预计为8.
我错过了什么吗?
ken*_*ken 15
这不是C#中变量的工作原理.它与拳击值类型无关.
考虑一下:
object o1 = new object();
object o2 = o1;
o2 = new object();
Run Code Online (Sandbox Code Playgroud)
为什么您期望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;
}
Run Code Online (Sandbox Code Playgroud)
最后Main,Val属性o1将包含8.
为了做你想做的事情,值必须是一个引用类型的属性:
public class IntWrapper
{
public int Value { get; set; }
public IntWrapper(int value) { Value = value; }
}
IntWrapper o1 = new IntWrapper(5);
IntWrapper o2 = o1;
o2.Value = 8;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10355 次 |
| 最近记录: |