如何从int创建引用类型

Mil*_*711 7 .net c#

我试过了:

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)

为什么您期望o1o2包含对同一对象的引用?设置时它们是相同的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.


pho*_*oog 5

为了做你想做的事情,值必须是一个引用类型的属性:

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)