C#浅复制与深复制

为对象创建副本的技术成为复制,复制分为浅复制与深复制。

浅复制:将对象中的所有字段复制到新的对象中,
a、值类型字段被复制到新对象中,修改不会影响原来对象的值。
b、引用类型的复制是引用类型的引用到新对象,而不是引用类型的对象,修改引用类型的值,影响原对象的值。


深复制:将原对象的复制到新的对象中,不过,无论是值类型,还是引用类型,都是重新创建并赋值修改不影响原对象的值。

例如:

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

    [Serializable]
    public class WorkInfo : ICloneable
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public DepartMent departMent { get; set; } = new DepartMent();

        public override string ToString()
        {
            return "ID:" + ID.ToString() + Environment.NewLine
                + "Name:" + Name + Environment.NewLine
                + "Age:" + Age.ToString() + Environment.NewLine + 
                "Departmen:" + departMent.Name.ToString() + Environment.NewLine + Environment.NewLine;
        }
        public object Clone()
        {
            return this.MemberwiseClone();
        }

        public WorkInfo ShallowClone()
        {
            return Clone() as WorkInfo;
        }

        public WorkInfo DeepClone()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, this);
                ms.Seek(0, SeekOrigin.Begin);
                return formatter.Deserialize(ms) as WorkInfo;
            }
        }
    }

运行结果

源代码

https://files.cnblogs.com/files/panpeng666/WndDeepOrShallowClone.rar?t=1693197322&download=true

 

posted on 2023-08-28 12:38  panpeng666  阅读(60)  评论(0编辑  收藏  举报

导航