C#中深度复制和浅度复制的区别

麻烦解释的详细些,谢谢
2024-10-27 16:15:17
推荐回答(1个)
回答1:

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