0

我有这行代码:

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 的价格。为什么?

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

4

2 回答 2

1

SomeClass是一个引用类型(用 class 声明SomeClass { ... })。a和引用类的b同一个实例(你用创建的那个new SomeClass()。这意味着,它指向同一个实例(然后指向同一个内存项)。

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

于 2013-07-21T19:36:05.530 回答
0

ValueType这是和之间的基本区别ReferenceType

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

使用 ReferenceType 在内存中创建一个对象,然后通过一个单独的引用进行处理——就像一个指针。这个引用负责改变前一个对象的值。 更多在这里

于 2013-07-21T19:45:40.960 回答