C#中没有直接的深度复制,这个需要手动实现,浅表复制就是只复制第一层的值类型的值和引用类型的引用。你看这个浅表复制,就是在你改如图注释所示处的时候,也会修改cloner2.con.val的值,如果是深度复制,就不会。
class Content
{
public int val;
}
class Cloner
{
public Content con = new Content();
public int val;
public Cloner(int newValue)
{
con.val = newValue;
val = newValue;
}
public object GetCopy()
{
return MemberwiseClone();
}
public static void Main()
{
Cloner cloner1 = new Cloner(123);
Cloner cloner2 = cloner1.GetCopy() as Cloner;
cloner1.con.val = 1;//这里
cloner1.val = 1;
Console.WriteLine("cloner1.con.val:{0}",cloner1.con.val);
Console.WriteLine("cloner2.con.val:{0}",cloner2.con.val);
Console.WriteLine("cloner1.val:{0}", cloner1.val);
Console.WriteLine("cloner2.val:{0}", cloner2.val);
Console.ReadKey();
}
}
参见这里:http://www.cnblogs.com/hl3292/archive/2011/07/13/2105156.html