索引:

目录索引

一.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. QT读取xml配置文件

    //获取字符串字段 QString ConfigHelper::GetStringConfigValue(QString str) { if(str == "InitDeviceNo&quo ...

  2. Elasticsearch安装配置

    文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.5/setup.html 官方页面提供自0.9版本以来的说明文档,由于我 ...

  3. July 03rd. 2018, Week 27th. Tuesday

    I don't know anything with certainty, but seeing the stars makes me dream. 我不知道世间有什么事是确定不变的,但只要一看到星空 ...

  4. 秋季学期学习总结&&以及下学期的期待

    秋季总结 第一学期已经结束了,下面来分点归纳下知识点: ·基础编程:利用c语言来进行编程 ·分支结构:利用if-else语句和switch语句编程,以及字符型数据的利用 ·循环结构:利用while.d ...

  5. 面试题解:输入一个数A,找到大于A的一个最小数B,且B中不存在连续相等的两个数字

    玄魂工作室秘书 [玄魂工作室]      昨天发的算法有一处情况没考虑到,比如加一后有进位,导致又出现重复数字的情况,修正后今天重新发一次.     比如输入99,那B应该是101 因为100有两个连 ...

  6. cglib根据数据动态生成对象

    最近有个任务:根据查询SQL直接导出报表 实现关键是,怎么根据sql查询的数据动态生成对象列表,想到Cglib动态代理实现 废话少说,上代码: 定义动态生成Java Bean类: import jav ...

  7. 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的

    概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...

  8. vue的父子组件间的相互传参props及props数据的多种验证机制

    感觉自己即将完全步入前端大军,后台老板都不需要我弄了,塞翁失马...时间会告诉我们是好是坏 好了言归正传,最近vue是搞的不亦乐乎啊,下面来总结一下vue组件间的各种使用方法以及一些技巧 ------ ...

  9. C# net request payload形式发送post请求

    因为开发微信群发电脑版需要模拟微信POST请求,微信发送消息使用request payload发送,实际发送的是json字符串.我们只需要生成的json字符串和请求的一致,header头完全模拟即可. ...

  10. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...