克隆分为深度克隆和浅度克隆

克隆是就复制的意思,也就是复制一个实例的副本

 

浅克隆:复制当前实例的所有值类型。

深克隆:复制当前实例的所有类型成员。

先看浅克隆的一个图,比较清晰:

C#  深克隆和浅克隆_浅克隆

 

浅克隆把所有值类型复制了一份,引用类型只是复制了他的引用地址。地址里的对象空间内容没复制。还是指向同一个引用对象。

深克隆就是这样

C#  深克隆和浅克隆_深克隆_02

 

 

 代码这样实现


C#  深克隆和浅克隆_赋值_03C#  深克隆和浅克隆_值类型_04


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 }

View Code

 


作者:小换哥​,转载请注明原文链接​