【发布时间】:2016-06-10 13:14:15
【问题描述】:
下面是我的课
public Class Test
{
int id {get;set;}
string name {get;set;}
}
我正在创建这个类的一个对象并赋值。
var obj = new Test();
obj.id = 1;
obj.name = "test";
var newobj = obj;
newobj.name ="NewTest";
下面是输出
Console.WriteLine(obj.name); //NewTest
Console.WriteLine(newobj.name); //NewTest
当我更改新 obj 中存在的属性值时,为什么 obj 的值会发生变化。我知道它的解决方案,我不确定为什么我找不到。如果我更改了 newobj 中的值,我不希望 obj 的值发生更改。
【问题讨论】:
-
obj.name的值在您更改newobj.name时会发生变化,因为它们是相同的。newobj和obj都指向内存中的相同位置。它们只是对同一对象的不同引用。如果你想创建一个真正的副本,你必须创建一个方法来构造一个new Test()并相应地设置新对象的属性。 -
换句话说 - newobj 是对 obj 引用的同一对象的另一个引用
-
Test是一个引用类型。 -
确保这些对象不链接的方法是创建一个新的'newobj'
标签: c#