可能重复:
如何在.Net(特别是C#)中深层复制对象?
请看下面的代码(摘自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();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道它会产生下面的输出
objectA.val …Run Code Online (Sandbox Code Playgroud) 你能解释一下为什么我应该继承ICloneable并实现这个Clone()方法吗?
如果我想做一个深层复制,我不能只实现我的方法吗?我们说吧MyClone()?
我为什么要继承ICloneable?有什么好处?这只是让代码"更具可读性"的问题吗?
在C#中,向类添加(深层)复制功能的首选方法是什么?是应该实现复制构造函数,还是从派生ICloneable并实现该Clone()方法?
备注:我在括号内写了"深刻",因为我认为这是无关紧要的.显然其他人不同意,所以我问复制构造函数/操作符/函数是否需要明确它实现的副本变体.