首页 > 解决方案 > 装箱/拆箱,更改装箱值的引用副本不会反映到装箱值

问题描述

所以我在这里通读了微软的文档

考虑以下代码:

int i = 0;
object o = i;
object p = o;

o = 1;
p = 2;

Console.WriteLine($"o:{o}, p:{p}");
//output o:1, p:2

我的理解是装箱发生在 上object o = i;,现在o是对堆中值的引用。然后将p分配为与o相同。

为什么不将prefected更改为o?他们不是指向同一个地址吗?

标签: c#typesreferenceboxingunboxing

解决方案


您的理解不正确;线

 object p = o;

分配p相同的参考;然而:

o = 1;

创建一个对象(装箱整数)并将引用分配给o; o现在p是不同的参考;

p = 2;

然后对另一个装箱对象和参考做同样的事情


但是,您的期望“参考本地人”的工作方式:

int i = 0;
ref int o = ref i;
ref int p = ref o;

o = 1;
Console.WriteLine(i); // 1
p = 2;
Console.WriteLine(i); // 2

推荐阅读