根据我对Made one instance of a class equal to another. – How to cancel that?的理解,对象只是对内存的引用,这意味着如果两个对象彼此相等并且对一个对象进行一次更改,则相同的更改应该应用于另一个对象。
但是,当我运行此代码时:
Point original = new Point(100, 100);
Point temp = original;
original.X += 100;
Console.WriteLine(original);
Console.WriteLine(temp);
原始和临时的输出是不同的。我错过了什么吗?
这是输出:
{X=200,Y=100}
{X=100,Y=100}
答案 0 :(得分:6)
假设Point
是Point structure,则它是值类型。 struct
是值类型。
值类型完全按值复制。所以每个都是新的副本。这与引用类型不同,后者仅复制引用(指向内存的内容)。
答案 1 :(得分:2)
从Point Structure,你会注意到Point是一个结构,来自struct (C# Reference)
结构类型是一种通常用于封装的值类型 小组相关变量,例如a的坐标 矩形或库存中物品的特征。
同样来自Structs (C# Programming Guide)
在分配时复制结构。将结构分配给新变量时,将复制所有数据,并对新副本进行任何修改 不会更改原始副本的数据。
答案 2 :(得分:0)
Made one instance of a class equal to another. – How to cancel that?讨论的参考类型是正确的。
这里有一个值类型。
答案 3 :(得分:0)
请参见图表,演示值类型