我一直在尝试深入理解引用类型和值类型。就在我认为我已经理解了它们的时候,我遇到了这种情况...
我创建了一个包含单个对象的类。
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;
正如预期的那样,当我打印出a.A和b.A的值时,它们是相同的。
Console.WriteLine("a.A={0},b.A={1}",a.A,b.A);
//a.A=1,b.A=1
正如预期的那样,当我更改a.A的值时,由于它们都引用同一对象,b.A的值也会相应地发生更改。
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的值不像以前那样改变。 请问有人能解释一下为什么这种情况下赋值与之前的不同吗? 谢谢。