当前位置:编程学习 > C#/ASP.NET >>

请教一个深拷贝 拷贝深度的问题?

--------------------编程问答-------------------- 你这个例子跟拷贝没什么关系,只是创建新的对象罢了。

深拷贝是要递归拷贝的,一般情况下也可以用序列化的方法。 --------------------编程问答-------------------- Point对象没有克隆了一份
其实就是同一个对象
是递归拷贝 --------------------编程问答-------------------- 深拷贝 指的是值一样只不过地址不一样  你这个只是创建了一个新对象 --------------------编程问答--------------------
    class TestClone: ICloneable
    {
        Point pt = new Point();

        public int[] intArr = new int[2];
        
        List<Point> oldList = new List<Point>();  



        public object Clone()
        {
            //请问如何实现深克隆?
            return null;
        }

    }


 //请问如何实现深克隆? --------------------编程问答-------------------- using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

public static T DeepClone<T>(T obj)
{
 using (var ms = new MemoryStream())
 {
   var formatter = new BinaryFormatter();
   formatter.Serialize(ms, obj);
   ms.Position = 0;

   return (T) formatter.Deserialize(ms);
 }
}

注意T类型必须实现ISerializable接口。 --------------------编程问答--------------------
引用 1 楼 MicrosoftCenterOfHN 的回复:
你这个例子跟拷贝没什么关系,只是创建新的对象罢了。

深拷贝是要递归拷贝的,一般情况下也可以用序列化的方法。

+1
没看出哪有拷贝 --------------------编程问答--------------------
引用 4 楼 corn8888 的回复:
    class TestClone: ICloneable
    {
        Point pt = new Point();
        public int[] intArr = new int[2];       
        List<Point> oldList = new List<Point>();  
        public object Clone()
        {
            //请问如何实现深克隆?
            return null;
        }
    }


 //请问如何实现深克隆?



TestClone类标记Serializable
在Clone方法中 将自己序列化  跟着再反序列化出一个新的TestClone对象  该对象跟原来对象一模一样  但就不是同一个东西

缺陷就是 TestClone以及内部成员都需要标记为Serializable --------------------编程问答-------------------- 参见下图:




--------------------编程问答-------------------- 楼主其实想问的是,当一个对象被深拷贝以后,里面的List对象会不会被深拷贝下来
按照楼主的方法,List对象是不能深拷贝下来的。
因为楼主只是在Clone方法中新建了一个对象,没有实现复制的过程。 --------------------编程问答-------------------- 简单地说 new 这个关键字只是将对象本体新建了一份,根本就没有复制的功能。
 要深度复制,必须使用类似递归的方法将要复制的对象及对象下面的所有子对象,子子对象,子子子对象....一一复制。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,