索引:

目录索引

一.API 列表

  .DeepClone()

    用于 Model / Entity / ... ... 等引用类型对象的深度克隆

  特性说明

    1.不需要对对象做任何特殊处理,直接 .DeepClone() 即可得到该对象的深度克隆

    2.不受对象层次深度限制,均可实现深度克隆(下面会给出几个简单示例 ... ...)

二.API 使用

  1.命名空间,只需:

 using MyDAL.ModelTools;

  2.被深度克隆的对象只需是一个 class ,如下:

     public class ModelEntity
{
public int ValueField { get; set; } public string ReferenceField { get; set; } public ModelEntity ObjectField { get; set; }
}

  3.深度克隆 / 深度复制 示例

             // 对象准备
var obj = new ModelEntity
{
ValueField = ,
ReferenceField = "源值10",
ObjectField = new ModelEntity
{
ValueField = ,
ReferenceField = "源值11",
ObjectField = new ModelEntity
{
ValueField = ,
ReferenceField = "源值12"
}
}
}; // 深度克隆
var cloneObj = obj.DeepClone(); // 源对象 值展示
Console.WriteLine(obj.ValueField); //
Console.WriteLine(obj.ReferenceField); // 源值10
Console.WriteLine(obj.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(obj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 // 克隆对象 值展示
Console.WriteLine(cloneObj.ValueField); //
Console.WriteLine(cloneObj.ReferenceField); // 源值10
Console.WriteLine(cloneObj.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 源值12 // 变更 克隆对象 的值
cloneObj.ReferenceField = "新值10";
cloneObj.ObjectField.ReferenceField = "新值11";
cloneObj.ObjectField.ObjectField.ReferenceField = "新值12"; // 源对象 值展示
Console.WriteLine(obj.ValueField); //
Console.WriteLine(obj.ReferenceField); // 源值10
Console.WriteLine(obj.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(obj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 // 克隆对象 值展示
Console.WriteLine(cloneObj.ValueField); //
Console.WriteLine(cloneObj.ReferenceField); // 新值10
Console.WriteLine(cloneObj.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 新值11
Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 新值12

                                         蒙

                                    2019-03-09 15:22 周六

MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用的更多相关文章

  1. js对象简单、深度克隆(复制)

    javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组( ...

  2. javascript中对象的深度克隆

    记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...

  3. javascript对象的深度克隆

    在做项目的时候需要向对象里面添加新属性,又不想修改原对象.于是就写: var newObj = oldObj,但是新对象属性改变后就对象也会跟着改变,这是因为无论是新对象还是旧对象,指向的内存地址都是 ...

  4. js之深度克隆、简易克隆

    一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始 ...

  5. 如何复制一个java对象(浅克隆与深度克隆)

    在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导致这个对象在内存中的值被彻底改变.但是很多时候 ...

  6. js实现数组、对象深度克隆的两种办法

    1.深度克隆的原理 JS中的深度克隆,指的是原对象改变了,克隆出来的新对象也不会改变,原对象与新对象是完全独立的关系. 实现深度克隆的原理得从对象是一种引用类型说起 众所周知,对象是一种引用类型,对象 ...

  7. C#对象深度克隆

    有基础的开发者都应该很明白,对象是一个引用类型,例如: object b=new object(); object a=b; 那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也 ...

  8. java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

    java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配, ...

  9. java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...

随机推荐

  1. 前端ArcGIS学习之路-引言

    本系列主要关注ArcGIS Server以及ArcGIS API for Javascript,由于我本人是从前端方面向GIS方面学习,希望能够给更多需要了解GIS的程序员同学更多的参考.另外本系列会 ...

  2. javascript入门篇(五)

    将日期转换为数字 全局方法 Number() 可将日期转换为数字 d = new Date(); Number(d)          // 返回 1404568027739 日期方法 getTime ...

  3. mysql 多实例部署

    Centos7.6 部署3个Mariadb 实例 [root@localhost ~]# yum install mariadb-server -y # 创建对应的目录文件 [root@localho ...

  4. Odoo Linux服务器一键安装脚本使用指南

    Odoo安装脚本介绍 为了帮助更多Linux服务器维护人员快速部署Odoo,为此开源智造(OSCG)基于André Schenkels曾经开放的openerp-install-scripts所构建的基 ...

  5. Percona XtraBackup 关于 MySQL备份还原的详细测试

    一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创 ...

  6. sql语句 汉字转拼音首字母

    (1)------------------------------------------------------------------------------------------------- ...

  7. Java的Random类详解

    Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子(以当前时间作为种子),另一个构造器需要程序员显示传入一个long型整数的种子. Random类比Math类的rando ...

  8. 解决MUI阻止a标签默认跳转事件—方法总结

    用过mui的小伙伴们一定不会陌生,有时候真的很烦mui本身会阻止a标签默认跳转.一般只要用了mui的ui组件,比如头部,底部或者弹框,你就不能在用a标签进行跳转了. 注:项目中引用了mui后,可能也会 ...

  9. Python + PyQt5 实现美剧爬虫可视工具(二)

    美剧<权力的游戏>终于开播最后一季了,在上周写了个简单的可视化美剧的爬虫软件来爬取美剧,链接:https://www.cnblogs.com/weijiutao/p/10614694.ht ...

  10. 【Netty】(3)—源码NioEventLoopGroup

    netty(3)-源码NioEventLoopGroup 一.概念 NioEventLoopGroup对象可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个C ...