我有这行代码:
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价格的影响。的为什么吗
我的意思是内存中会发生什么导致这种情况?
答案 0 :(得分:1)
SomeClass
是引用类型(使用类SomeClass { ... }
声明)。
a
和b
引用类的同一个实例(使用new SomeClass()
创建的实例。这意味着它指向同一个实例(然后指向同一个内存项)。 / p>
要使您想要的行为必须使用值类型(使用struct SomeStruct { ... }
声明)。
答案 1 :(得分:0)
这是ValueType
和ReferenceType
之间的基本区别。
使用ValueType,内存中的一个空间被分配来存储值。(例如:int,bool,char是值类型)。
使用ReferenceType,在内存中创建一个对象,然后通过单独的引用处理 - 而不是像指针一样。此引用负责更改上一个对象的值。 More here