.NET框架-Clone详请引见【C#.Net教程】,.NET框架,Clone
作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:33评论:0
检察ArrayList中关于Clone要领的引见:
竖立 System.Collections.ArrayList 的浅表副本。
很猎奇,浅表副本的观点,上msdn查阅后,诠释的意义比较艰涩一点,浅表复制鸠合是指仅仅复制鸠合元素,不论元素是值范例照样援用范例,然则Clone并不会复制对象(援用指向的对象)。新Clone后的鸠合中,援用照样指向同一个对象(本来鸠合中援用指向的对象)。
A shallow copy of a collection copies only the elements of the collection, whether they are reference types or value types, but it does not copy the objects that the references refer to. The references in the new collection point to the same objects that the references in the original collection point to.
一句话归纳综合,Clone完成的所谓浅表副本,Clone出来的对象复制了值范例,复制了援用,而未复制援用对象。这个时刻,能够就要问了,未复制援用对象是什么意义?经由过程代码是最好申明题目的,请看下面的代码,
//职员对象模子 public class Person { public string name { get; set; } public ContactInfo description { get; set; } public Person(string name, ContactInfo description) { this.description = description; this.name = name; } } //联络信息对象 public class ContactInfo { public string address { get; set; } public string telephone { get; set; } public ContactInfo(string address, string telephone) { this.address = address; this.telephone = telephone; } //跟新电话联络信息 public void UpdateTelephone(string telephone) { this.telephone = telephone; } }
新建一个ArrayList对象,并离别添加为一个援用对象,一个值范例数据
//ArrayList对象 ArrayList arr1 = new ArrayList(); //Person对象竖立,xiaoming援用Person对象 Person xiaoming = new Person("xiaoming",new ContactInfo("shanghai","18011113333")); //arr1援用xiaoming,如许arr1[0]也援用了Person对象 arr1.Add(xiaoming); //arr1中添加值范例整形5元素 arr1.Add(5);
我们经由过程Clone接口,Clone出一个arr1的浅表副本:
ArrayList cloneArr1 = arr1.Clone() as ArrayList;
如图所示:

离别测试,克隆出来的实例cloneArr1都复制了什么,我们离别check下值范例和援用范例的复制状况。先看值范例的复制状况:
cloneArr1[1]=6;
我们搜检下初始的鸠合arr1[1]的元素转变了吗?
未转变,值照样5,这申明,Clone后,值范例也复制出来,而且放到内存栈中。
Check下援用范例有无从新从内存堆中从新拓荒空间,修正xiaoming的联络-电话:
(cloneArr1[0] as Person).description.UpdateTelephone("170444455555");
这个时刻,我们再Check,初始鸠合arr1中xiaoming的联络方式转变了吗?
答案:转变了,和最新的170444455555一致。
这申明了对援用范例,浅表副本复制,只是复制援用,而未从新再内存堆中拓荒内存空间。(假如您对内存堆,内存栈,观点不是很清晰,请参考我总结的:C#.NET:内存治理story-变量竖立与烧毁)。
至此,我们对Clone的功用有了一个全新的认识了!浅表副本,援用范例只复制援用,不复制对象。!
那末假如说,我想完成了深度复制呢,也就是我新复制出来的对象不是仅仅复制援用, 而是复制对象!比如说,你需要在一个模板的基础上修正出5个版本的竖立,每一个版本投递到差别的企业上,版本1投给公司A,版本2投给公司B,。。。假如说这5个版本的差别仅仅是“我希冀到场某某公司”,某某换成5个公司对应的称号。
以上就是.NET框架-Clone详请引见的细致内容,更多请关注ki4网别的相干文章!
相关推荐
- .NET框架-内存治理story与变量创建和烧毁详解(图)【C#.Net教程】,.NET框架,story,变量
- .NET框架-鸠合和LINQ中的“分组”手艺代码详解【C#.Net教程】,.NET框架,集合,LINQ
- C#中.NET框架的简介【C#.Net教程】,.NET,.NET框架
- .NET框架-细致引见WinForm房贷分析器(图文)【C#.Net教程】,.NET框架,WinForm,房贷分析器
- .NET框架-LINQ9类操作符运用的示例代码【C#.Net教程】,.NET框架,LINQ9,操作符
- .NET框架-非常设想准绳详解【C#.Net教程】,.NET框架,异常,设计原则
- .NET框架-Try-Parse和Tester-Doer的运用区分【C#.Net教程】,.NET框架,Try-Parse,Tester-Doer
- .NET框架-详解Winform手艺中组件被容器援用圈套【C#.Net教程】,.NET框架,Winform,引用陷阱
- .NET框架-运用特征和反射搜检数据唯一性的示例代码【C#.Net教程】,.NET框架,应用特性,反射检查
- .NET框架- in ,out, ref , paras运用的代码总结【C#.Net教程】,.NET框架,paras,ref
你 发表评论:
欢迎- .Net教程排行
-
- 1案例分享c++ map的运用和 查找机能测试【C#.Net教程】,性能,map,c++
- 2细致引见C# string花样的日期时候字符串转为DateTime范例的要领【C#.Net教程】,C#,string,DateTime
- 3c#怎样运用?c#的基础语法【C#.Net教程】,c#,关键字
- 4详解ASP.NET中衔接数据库设置要领【C#.Net教程】,ASP.NET,数据库,配置
- 5C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
- 6.net和c#有什么区别【C#.Net教程】,.net,c#
- 7C#_挪用封装的一个类完成导出Excel表格的功用【C#.Net教程】,C# Excel表格
- 8asp .net 面试题及答案分享【C#.Net教程】,.net,自己,整理,问题,面试
- 9让WebAPI 返回JSON花样的数据实例教程【C#.Net教程】,javascript,WebAPI,JSON,api,web,搭建,返回
- 最新文章
- 广而告之