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; } } }
运行结果
源代码