为什么这两个对象没有链接?

时间:2014-02-14 04:44:51

标签: c#

根据我对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}

4 个答案:

答案 0 :(得分:6)

假设PointPoint 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)

请参见图表,演示值类型 demo