C# 深克隆和浅克隆

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

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

 

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

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

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

 

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

深克隆就是这样

 

 

 代码这样实现

 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

 

posted @ 2021-07-22 15:37  小换哥  阅读(151)  评论(0编辑  收藏  举报