【发布时间】:2014-04-25 01:09:18
【问题描述】:
我今天正在编写一个 c# 程序,结果不得不追一个 bug 很长一段时间。
我试图让一个对象的副本更改几个字段并将其与原始对象一样发送
例如
Function(Object A)
{
Object B = new Object();
Object B = A;
B.foo = "bar";
Send(A);
Send(B);
}
我的程序开始将 A 和 B 视为同一个对象,这意味着对 A 的任何更改也会更改 B,反之亦然。
我知道对象 A 和 B 都在引用相同的内存。
是否有一种简便的方法来确保Object B = A 行引用新内存从而创建不同的对象。或者是在我的 Object 中创建复制构造函数并使用 Object B = new Object(A) 创建 B 的唯一方法
例如:
Object(Object a){
foo = a.foo;
...
}
基本上,我只是想了解更多关于 C# 如何处理对象引用和内存分配的信息。我知道的大主题。
【问题讨论】:
-
见msdn.microsoft.com/en-us/library/t63sy5hs.aspx。如果您想要一份(浅)作业副本,您可能想要使用
struct。 -
仅供参考,
Object B = new Object();对您没有任何作用,因为下一行,您将B设置为其他值。 -
... 因为从表面上看,“对象 B”不会创建对象、对象或“对象”。它甚至没有声明一个持有变量的变量。
标签: c#