zoukankan      html  css  js  c++  java
  • 序列化与反序列化实现深度复制。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                User usr1 = new User();
                usr1.addr = new addressFormat("ykwang1");
                User usr2 = usr1.Clone();
                usr2.addr.address = "ykwang2";
                Console.Write(usr1.addr.address);
                User usr3 = usr1.Clone(true);
                usr3.addr.address = "ykwang3";
                Console.Write(usr1.addr.address);
                Console.ReadKey();
            }
        }
        [Serializable]
        public class User : ICloneable
        {
            public string name;
            public string desc;
            public string remark;
            public addressFormat addr;
    
            public User()
            { }
    
            protected User(User u)
            {
                name = u.name;
                desc = u.desc;
                remark = u.remark;
            }
    
            object ICloneable.Clone()
            {
                return base.MemberwiseClone();
            }
    
            public User Clone()
            {
                return base.MemberwiseClone() as User;
                //return new User(this);
            }
    
            public User Clone(bool IsDeepCopy)
            {
                using (MemoryStream ms = new MemoryStream(1000))
                {
                    BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
                    bf.Serialize(ms, this);
                    ms.Seek(0, SeekOrigin.Begin);
                    User u = bf.Deserialize(ms) as User;
                    ms.Close();
                    return u;
                }
            }
        }
        [Serializable]
        public class addressFormat
        {
            public string address;
            public addressFormat(string addtest)
            {
                address = addtest;
            }
        }
    
    }
    

      另外可使用传统的new关键字实现深度复制,如果实现一个不可序列化的类的深度复制的统一模板,则需要采用递归跟new关键字去实现。

  • 相关阅读:
    [LOJ 6436][PKUSC2018] 神仙的游戏
    [BZOJ 2653] middle
    [WC2018] 州区划分
    [BZOJ 4556][Tjoi2016&Heoi2016]字符串
    [BZOJ 3514]Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES)
    [BZOJ 4573][ZJOI 2016]大♂森林
    Problem 2322. -- [BeiJing2011]梦想封印
    [BZOJ 2555] SubString
    [日常] NOIWC2019 冬眠记
    [BZOJ 4036][HAOI2015]按位或
  • 原文地址:https://www.cnblogs.com/ykwang/p/3213762.html
Copyright © 2011-2022 走看看