MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用
索引:
一.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() 深度克隆[深度复制] 工具 使用的更多相关文章
- js对象简单、深度克隆(复制)
javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组( ...
- javascript中对象的深度克隆
记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...
- javascript对象的深度克隆
在做项目的时候需要向对象里面添加新属性,又不想修改原对象.于是就写: var newObj = oldObj,但是新对象属性改变后就对象也会跟着改变,这是因为无论是新对象还是旧对象,指向的内存地址都是 ...
- js之深度克隆、简易克隆
一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始 ...
- 如何复制一个java对象(浅克隆与深度克隆)
在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导致这个对象在内存中的值被彻底改变.但是很多时候 ...
- js实现数组、对象深度克隆的两种办法
1.深度克隆的原理 JS中的深度克隆,指的是原对象改变了,克隆出来的新对象也不会改变,原对象与新对象是完全独立的关系. 实现深度克隆的原理得从对象是一种引用类型说起 众所周知,对象是一种引用类型,对象 ...
- C#对象深度克隆
有基础的开发者都应该很明白,对象是一个引用类型,例如: object b=new object(); object a=b; 那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也 ...
- java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)
java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配, ...
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...
随机推荐
- java基础(七)-----深入剖析Java中的装箱和拆箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- 设计模式之行为类模式PK
行为类模式包括: 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 行为型模式涉及到算法和对象间职责的分配 行为类模式关注 ...
- vue实现商品购物车全选与全不选项目实战
项目需求: 实现一个购物车 全选框实现对商家和商品的全选 商家全选框实现对当前商家所有商品的全选 取消其中一个商品则取消对应商家全选和全选框 选中一个商家下的所有商品则勾选对应商家的全选框,不勾选全选 ...
- windows系统中,在当前目录下打开cmd命令行的两种方法
1.在当前路径地址栏中直接输入‘cmd’,然后回车. 2.在当前路径下,按住‘shift’键同时点击鼠标右键,点击“在此处打开Powershell”. 其实你会发现,两个命令行有很大的区别. cmd: ...
- ASP.NET Core Web API 版本控制
在nuget.org上,您可以找到 Microsoft.AspNetCore.Mvc.Versioning包,它提供了有关如何对Web API端点进行版本化的更多选项.这个包的好处是允许你直接在控制 ...
- qml demo分析(photosurface-图片涅拉)
阅读qml示例代码已有一小段时间,也陆续的写了一些自己关于qml示例代码的理解,可能由于自己没有大量的qml开发经验,总感觉复杂的ui交互qml处理起来可能会比较棘手,但事实总是会出人意料,今天我们就 ...
- 简述java接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方法 ...
- 获得当前EIP的值
VS2017 内联汇编 __asm { call NEXT NEXT: pop eax }
- 1.3创建项目「深入浅出ASP.NET Core系列」
控制台创建项目 dotnet new --help 使用控制台采集项目,务必要熟练使用命令,--help是命令帮助的指明灯,在你无法google的时候,可以离线状态最快的帮助到你. 根据模板名称,我们 ...
- .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)
前言: 自从.net core问世之后,就一直想了解.但是由于比较懒惰只是断断续续了解一点.近段时间工作不是太忙碌,所以偷闲写下自己学习过程.慢慢了解.net core 等这些基础方面学会之后再用.n ...