更改A对象的属性会影响更改B对象的属性

时间:2013-07-21 19:32:15

标签: c# object memory-management

我有这行代码:

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。但是当你为对象b的价格分配20时,同时变化会受到对象a价格的影响。的为什么吗

我的意思是内存中会发生什么导致这种情况?

2 个答案:

答案 0 :(得分:1)

SomeClass是引用类型(使用类SomeClass { ... }声明)。 ab引用类的同一个实例(使用new SomeClass()创建的实例。这意味着它指向同一个实例(然后指向同一个内存项)。 / p>

要使您想要的行为必须使用值类型(使用struct SomeStruct { ... }声明)。

答案 1 :(得分:0)

这是ValueTypeReferenceType之间的基本区别。

使用ValueType,内存中的一个空间被分配来存储值。(例如:int,bool,char是值类型)。

使用ReferenceType,在内存中创建一个对象,然后通过单独的引用处理 - 而不是像指针一样。此引用负责更改上一个对象的值。 More here