【发布时间】:2013-07-21 19:32:14
【问题描述】:
我有这行代码:
SomeClass a = new SomeClass();
SomeClass b = a;
a.price = 15;
b.price = 20;
Console.WriteLine(a.price); // output 20
首先我创建对象 a,然后创建对象 b。我为对象 b 分配了对象 a。当我为这些对象初始化属性价格时,您可以看到对象 a 的价格为 15,b 的价格为 20。但是当您将 20 分配给对象 b 的价格时,同时更改会影响对象 a 的价格。 为什么?
我的意思是内存中发生了什么导致这种情况?
【问题讨论】:
-
object b 是对 object a 的引用,如果您知道指针,则为指针,因此如果 a 或 b 发生变化,则另一个反映了变化
-
@MEYWD:
b根本不是一个对象。这是一个变量。b的值与a的值相同——两者都是对同一个对象的引用。区分变量、引用和对象的概念非常重要。更改a的值(以引用不同的对象)不会对b的值做任何事情。这只是反映了他们两个引用的对象的更改。 -
@JonSkeet 你是对的,我只是想用一种简单的形式来解释它,我所说的对象是指变量。
-
@MEYWD:问题在于,让事情变得“简单”往往会使事情变得混乱:(
标签: c# object memory-management