克隆分为深度克隆和浅度克隆
克隆是就复制的意思,也就是复制一个实例的副本
浅克隆:复制当前实例的所有值类型。
深克隆:复制当前实例的所有类型成员。
先看浅克隆的一个图,比较清晰:
浅克隆把所有值类型复制了一份,引用类型只是复制了他的引用地址。地址里的对象空间内容没复制。还是指向同一个引用对象。
深克隆就是这样
代码这样实现
1 /// <summary> 2 /// C# 浅克隆,就是新new的一个Presen,里面的值类型字段重新赋值了一份。引用类型,只是把引用地址赋值了一份,引用还是指向原来的地址。 3 /// </summary> 4 public class Presen 5 { 6 /// <summary> 7 /// 浅克隆 8 /// </summary> 9 /// <returns></returns> 10 public Presen Clone() 11 { 12 return (Presen)this.MemberwiseClone(); 13 } 14 public Presen(Object o) 15 { 16 this.Ob = o; 17 } 18 public object Ob { get; set; } 19 /// <summary> 20 /// 深克隆 21 /// </summary> 22 /// <returns></returns> 23 public Presen DeepClone() 24 { 25 MemoryStream ms = new MemoryStream(); 26 BinaryFormatter bf = new BinaryFormatter(); 27 bf.Serialize(ms, this); 28 ms.Seek(0, SeekOrigin.Begin); 29 Presen model = (Presen)bf.Deserialize(ms); 30 ms.Dispose(); 31 return model; 32 } 33 }