【发布时间】:2011-09-28 00:13:06
【问题描述】:
请看下面的代码(摘自一本 C# 书籍):
public class MyClass
{
public int val;
}
public struct myStruct
{
public int val;
}
public class Program
{
private static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("structA.val = {0}", structA.val);
Console.WriteLine("structB.val = {0}", structB.val);
Console.ReadKey();
}
}
我知道它会产生以下输出:
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
输出的最后两行我没有问题,但前两行告诉我objectA 和objectB 指向同一个内存块(因为在C# 中,对象是引用类型)。
问题是如何使objectB 成为objectA 的副本,以便它指向内存中的不同区域。我知道尝试分配他们的成员可能不起作用,因为这些成员也可能是参考。那么我该如何让objectB 成为与objectA 完全不同的实体呢?
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/questions/129389/…
-
字符串 json = Newtonsoft.Json.JsonConvert.SerializeObject(myobject); myObjType rCopy = Newtonsoft.Json.JsonConvert.DeserializeObject
(json); -
@hal9000 我使用了序列化/反序列化方法。下面的克隆解决方案有缺点吗?似乎是一个直截了当的解决方案。
-
我没有遇到任何不利因素。但是我不能评论下面的克隆解决方案。我没试过
-
@SiavashGhanbari 那肯定没有帮助。这个问题仍然悬而未决。此特定问题已被标记为重复。这个问题是重复的。
标签: c# object reference cloning