C#深拷贝

User u1=new User();

User u2=u1;

如上的代码使u2和u2同时指向一个地址,那么如何在内存里重新生成一份u1里面的数据呢?

    [Serializable]
    class DeepCopy
    {
        public User user;
        public DeepCopy CreateCopy(DeepCopy input)
        {
            MemoryStream m = new MemoryStream();
            BinaryFormatter b = new BinaryFormatter();
            b.Serialize(m,input);
            m.Position = 0;
            return (DeepCopy)b.Deserialize(m);
        }
    }

    [Serializable]
    class User
    {
        public string name;
        public User(string _name)
        {
            name = _name;
        }
    }

 下面是自己写的一个实例,直接通过对类的序列化与反序列化来实现深拷贝

    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person() { Name = "zhangsan" };

            BinaryFormatter b = new BinaryFormatter();
            MemoryStream stream = new MemoryStream();
            b.Serialize(stream, p1);
            stream.Seek(0, SeekOrigin.Begin);
            Person p2 = (Person)b.Deserialize(stream);
            p2.Name = "lisi";
            Console.WriteLine(p1.Name + "    " + p2.Name);
        }
    }

    [Serializable]
    public class Person
    {
        public string Name { get; set; }
    }

  

posted on 2013-11-01 13:56  我的代码库  阅读(145)  评论(0)    收藏  举报