当前位置: 首页 > news >正文

门户网站建设和运行保障招标文件日本网站源码

门户网站建设和运行保障招标文件,日本网站源码,龙游手机网站制作,安阳千度网络有限公司C#开发常见面试题三(浅复制和深复制的区别) 一.浅复制和深复制定义 (1)浅复制:复制一个对象的时候,仅仅复制原始对象中所有的非静态类型成员和所有的引用类型成员的引用。(新对象和原对象将共享所有引用类型成员的实…

C#开发常见面试题三(浅复制和深复制的区别)

一.浅复制和深复制定义

(1)浅复制:复制一个对象的时候,仅仅复制原始对象中所有的非静态类型成员和所有的引用类型成员的引用。(新对象和原对象将共享所有引用类型成员的实际对象)

(2)深复制:复制一个对象的时候,不仅复制所有非静态类型成员,还要复制所有引用类型成员的实际对象

在.NET中,基类System.Object已经为所有类型都实现了浅复制,类型所要做的就是公开一个复制的接口,而通常的,这个接口会由ICloneable接口来实现。ICloneable只包含一个方法Clone,该方法既可以被实现为浅复制也可以被实现为深复制,具体如何取舍则根据具体类型的需求决定。此外,在Sys-tem.Object基类中,有一个保护的MemeberwiseClone()方法,它便用于进行浅度复制。

二.代码理解

    public object Clone(){    return MemberwiseClone();}

实例

    public class DeepCopy : ICloneable{public int i = 0;public A a = new A();public object Clone(){// 实现深复制-方式1:依次赋值和实例化DeepCopy newObj = new DeepCopy();newObj.a = new A();newObj.a.message = this.a.message;newObj.i = this.i;return newObj;}public new object MemberwiseClone(){// 实现浅复制return base.MemberwiseClone();}public override string ToString(){string result = string.Format("I的值为{0},A为{1}", this.i.ToString(), this.a.message);return result;}}public class A{public string message = "我是原始A";}public class Program{static void Main(string[] args){DeepCopy dc = new DeepCopy();dc.i = 10;dc.a = new A();DeepCopy deepClone = dc.Clone() as DeepCopy;DeepCopy shadowClone = dc.MemberwiseClone() as DeepCopy;// 深复制的目标对象将拥有自己的引用类型成员对象deepClone.a.message = "我是深复制的A";Console.WriteLine(dc);Console.WriteLine(deepClone);Console.WriteLine();// 浅复制的目标对象将和原始对象共享引用类型成员对象shadowClone.a.message = "我是浅复制的A";Console.WriteLine(dc);Console.WriteLine(shadowClone);Console.ReadKey();}}

执行结果

三.如何实现深复制

1.逐个复制

2.序列化实现深复制

    [Serializable]public class DeepCopy : ICloneable{......public object Clone(){// 实现深复制-方式1:依次赋值和实例化//DeepCopy newObj = new DeepCopy();//newObj.a = new A();//newObj.a.message = this.a.message;//newObj.i = this.i;//return newObj;// 实现深复制-方式2:序列化/反序列化BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, this); ms.Position = 0; return bf.Deserialize(ms);}......}[Serializable]public class A{public string message = "我是原始A";}

PS:一般可被继承的类型应该避免实现ICloneable接口,因为这样做将强制所有的子类型都需要实现ICloneable接口,否则将使类型的深复制不能覆盖子类的新成员。


复习一下基础知识。

http://www.hkea.cn/news/251107/

相关文章:

  • 进入兔展网站做PPt软文营销ppt
  • app网站新闻危机公关
  • 东莞关键词优化实力乐云seo南宁seo外包服务商
  • 做网站都是用源码么免费注册个人网站不花钱
  • 建设网站需要两种服务支持官网设计公司
  • 安庆做网站seo建站收费地震
  • 绵阳住房和城市建设局网站官网seo排名优化联系13火星软件
  • 网站开发建设费用关键词异地排名查询
  • 网站建设企业电话广州优化疫情防控举措
  • 重庆模板网站建设百度网站域名注册
  • 安徽建设厅网站地址网络广告推广方式
  • 门户网站内容管理建设方案企业关键词优化推荐
  • 北京网站建设公司飞沐小学生一分钟新闻播报
  • 企业网站建设申请域名seo赚钱
  • 2017网站开发前景百度网盘资源链接入口
  • 平面广告设计主题seo是怎么优化上去
  • 正规网站制作公司哪家好四年级写一小段新闻
  • 济南网站建设安卓版快手seo
  • java开发兼职网站开发线上推广平台
  • 北京网站建设开发公司网站自动收录
  • wordpress最多多少用户seo基础知识
  • 湘潭做网站 去磐石网络b站推出的短视频app哪个好
  • 宿迁做网站的公司有人看片吗免费观看视频
  • 什么人最需要建设网站淘宝运营一般要学多久
  • 海南网站优化东莞免费建站公司
  • 传播型网站建设优势有哪些推广类软文
  • 如何在百度做网站推广赚钱的软件
  • c# 网站开发教程周口网站seo
  • 湘西网站建设帮人推广注册app的平台
  • 切图做网站web制作网站的模板