如何简单地实现引用类型的深度克隆
2016-08-08 17:42
267 查看
首先我们需要了解一下引用类型和值类型
1、byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型在声明变量后便分配了内存,值类型存储在堆栈中。
2、list,class,interface,delegete,object,string[],array 等为引用类型,引用类型变量的赋值只复制对对象的引用,而不复制对象本身,当复制的值改变时,本身的对象也会随之改变。引用类型存储在托管堆上。
使用类进行深度克隆
1、byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型在声明变量后便分配了内存,值类型存储在堆栈中。
2、list,class,interface,delegete,object,string[],array 等为引用类型,引用类型变量的赋值只复制对对象的引用,而不复制对象本身,当复制的值改变时,本身的对象也会随之改变。引用类型存储在托管堆上。
实现引用类型深度克隆示例
声明类并继承ICloneablepublic class ResultList : ICloneable { public int id { get; set; } public string name { get; set; } public object Clone() { ResultList result = new ResultList (); result.id = this.id; result.name= this.name; return result; } }
使用类进行深度克隆
static void Main(string[] args) { var result = new List<ResultList>(); var info = new ResultList(); info.id = 1; info.name = "john"; result.Add(info); var resultclone = new List<ResultList>(); //声明新的List用来装克隆的数据 result.ForEach(t => { resultclone.Add(t.Clone() as ResultList); }); //深度克隆 resultclone.FirstOrDefault().name = "john1"; //深度克隆后修改名称并不会影响原来list的值 Console.log("result:" + result.FirstOrDefault().name); Console.log("resultclone:" + resultclone.FirstOrDefault().name); //输出结果为 //result:john //resultclone:john1 }
相关文章推荐
- lua深度克隆的实现(lua基本数据类型传的是值,表类型传的是引用)
- PHP如何通过传引用的思想实现无限分类(代码简单)
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- JS对象简单、深度克隆(赋值与引用的区别)
- 如何实现对象的深度克隆
- js--引用类型Array--3.数组简单复制和深度复制
- 如何应用Asp.Net Mvc内建功能(DefaultModelBinder)实现简单类型、复杂类型、集合类型,以及字典类型的自动绑定
- Windows Phone 8 学习志(探索问题一:如何简单利用Windows Phone Runtime Component项目类型实现C#和C++交互)
- 通过实现Cloneable接口和覆盖clone()方法实现深度克隆,以及如何通过ByteArrayIOStream实现克隆
- JS对象简单、深度克隆(赋值与引用的区别)
- ****ife 递归实现深度克隆(内含JS数据类型判断,对象遍历)****
- 如何实现按值传递引用类型
- java 引用数据类型实现 对象的克隆
- 如何实现文本框焦点自动跳转及通过回车键提交表单[引用]
- 如何简单实现可执行文件的自我删除
- 如何实现用单网卡共享上网(超简单)
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )(二)
- 引用(C++里的藿香正气)的真相-(VC编译器如何实现引用规则)
- [转]如何实现按键精灵的简单路点行走