设为首页 加入收藏

TOP

MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用
2019-09-17 18:24:24 】 浏览:19
Tags:MyDAL 引用 类型 对象 .DeepClone 深度 克隆 复制 工具 使用

索引:

目录索引

一.API 列表

  .DeepClone()

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

  特性说明

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

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

二.API 使用

  1.命名空间,只需:

1 using MyDAL.ModelTools;

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

1     public class ModelEntity
2     {
3         public int ValueField { get; set; }
4 
5         public string ReferenceField { get; set; }
6 
7         public ModelEntity ObjectField { get; set; }
8     }

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

 1             // 对象准备
 2             var obj = new ModelEntity
 3             {
 4                 ValueField = 10,
 5                 ReferenceField = "源值10",
 6                 ObjectField = new ModelEntity
 7                 {
 8                     ValueField = 11,
 9                     ReferenceField = "源值11",
10                     ObjectField = new ModelEntity
11                     {
12                         ValueField = 12,
13                         ReferenceField = "源值12"
14                     }
15                 }
16             };
17 
18             // 深度克隆
19             var cloneObj = obj.DeepClone();
20 
21             // 源对象 值展示
22             Console.WriteLine(obj.ValueField);   // 10
23             Console.WriteLine(obj.ReferenceField);  // 源值10
24             Console.WriteLine(obj.ObjectField.ValueField);  // 11
25             Console.WriteLine(obj.ObjectField.ReferenceField);  // 源值11
26             Console.WriteLine(obj.ObjectField.ObjectField.ValueField);  // 12
27             Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField);  // 源值12
28 
29             // 克隆对象 值展示
30             Console.WriteLine(cloneObj.ValueField);  // 10
31             Console.WriteLine(cloneObj.ReferenceField);  // 源值10
32             Console.WriteLine(cloneObj.ObjectField.ValueField);  // 11
33             Console.WriteLine(cloneObj.ObjectField.ReferenceField);  // 源值11
34             Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField);  // 12
35             Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField);  // 源值12
36 
37             // 变更 克隆对象 的值
38             cloneObj.ReferenceField = "新值10";
39             cloneObj.ObjectField.ReferenceField = "新值11";
40             cloneObj.ObjectField.ObjectField.ReferenceField = "新值12";
41 
42             // 源对象 值展示
43             Console.WriteLine(obj.ValueField);   // 10
44             Console.WriteLine(obj.ReferenceField);  // 源值10
45             Console.WriteLine(obj.ObjectField.ValueField);  // 11
46             Console.WriteLine(obj.ObjectField.ReferenceField);  // 源值11
47             Console.WriteLine(obj.ObjectField.ObjectField.ValueField);  // 12
48             Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField);  // 源值12
49 
50             // 克隆对象 值展示
51             Console.WriteLine(cloneObj.ValueField);  // 10
52             Console.WriteLine(cloneObj.ReferenceField);  // 新值10
53             Console.WriteLine(cloneObj.ObjectField.ValueField);  // 11
54             Console.WriteLine(cloneObj.ObjectField.ReferenceField);  // 新值11
55             Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField);  // 12
56             Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField);  // 新值12

 

 

 

 

 

                                         蒙

                                    2019-03-09 15:22 周六

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.Net 接入CAS 遇到的坑 下一篇C# Winform 换肤

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目