我一直在尝试彻底理解 Reference 和 Value 类型。就在我以为我有它的时候,我遇到了这个场景......
我创建了一个包含单个对象的类。
class Container
{
public object A {get; set;}
}
当我创建此 Container 类的实例时 (a) 我正在创建引用类型的实例。我为类中的对象分配了一个整数。据我所知,这将被装箱为一个对象,另一种引用类型。
int start = 1;
Container a = new Container{ A=start };
我创建了 Container 类 (b) 的另一个实例,但是将第一个容器的值分配给它,b 的值现在是对 a 的引用。
Container b = a;
正如预期的那样,当我打印出 aA 和 bA 的值时,它们是相同的。
Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
//a.A=1,b.A=1
而且,正如预期的那样,当我更改 aA 的值时,bA 的值也会因为它们引用同一个对象而发生变化。
a.A = 2;
Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
// a.A=2,b.A=2
现在我决定尝试使用单个本地对象。同样,我将整数装箱到第一个对象中,并将第一个对象的值分配给第二个对象。我相信此时的对象应该是引用类型,因此 c 和 d 应该引用同一个对象。在不更改任何内容的情况下,它们返回相同的值。
int start = 1;
object c = start;
object d = c;
Console.WriteLine("c={0},d={1}",c,d);
// c=1,d=1
和以前一样,在更改初始对象的值时,我希望两个对象的值相同。
c = 2;
Console.WriteLine("c={0},d={1}",c,d);
// c=2,d=1
当我打印这两个对象的结果时, d 的值不会像以前那样改变。
有人可以解释为什么在这种情况下的分配与以前的不同吗?
谢谢