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 阅读(79) 评论(0) 收藏 举报
浙公网安备 33010602011771号