• 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

    本文来自博客园,作者:小换哥,转载请注明原文链接:https://www.cnblogs.com/haunge/p/15044441.html

  • 相关阅读:
    windows安装kafka
    excel打开utf-8的csv乱码
    laravel 记录慢sql日志
    php ftp连接的坑
    公用辅助方法
    ubuntu重置网络配置
    php socket
    docker ftp配置多个用户
    php aes-ecb-128位加密
    redis集群 哨兵模式
  • 原文地址:https://www.cnblogs.com/haunge/p/15044441.html
Copyright © 2020-2023  润新知