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

无锡网站制作楚天软件附近装修公司电话号码

无锡网站制作楚天软件,附近装修公司电话号码,网站开发实施计划与安排,网站域名怎么快速备案深入浅出图解C#堆与栈 C# Heaping VS Stacking 第五节 引用类型复制问题及用克隆接口ICloneable修复 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节…

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第五节 引用类型复制问题及用克隆接口ICloneable修复

  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.net/mdeditor/101022949#)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型](https://mp.csdn.net/mdeditor/101023885#)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1](https://mp.csdn.net/mdeditor/101026168#)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2](https://mp.csdn.net/mdeditor/101027584#)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复](https://mp.csdn.net/mdeditor/101028008#)
  • [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能](https://mp.csdn.net/mdeditor/101029557#)
  • 堆中引用类型复制问题及用克隆接口ICloneable修复
    • 前言
    • 简介
    • 赋值不仅仅是赋值
      • 值类型测试
    • 如果我们把Shoe换成引用类型呢?**
      • 引用类型测试**
    • 整理我们的代码
    • 特殊引用类型String
    • 总结

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能

堆中引用类型复制问题及用克隆接口ICloneable修复

前言

虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。


简介

这一节我们将介绍引用类型变量在堆中存储时会产生的问题,同时介绍怎么样使用克隆接口ICloneable去修复这种问题。


赋值不仅仅是赋值

为了更清晰的阐述这个问题,让我们测试一下在堆中存储值类型变量和引用类型变量时会产生的不同情况。


值类型测试

首先,我们看一下值类型。下面是一个类和一个结构类型(值类型),Dude类包含一个Name元素和两个Shoe元素。我们有一个CopyDude()方法用来复制生成新Dude。
在这里插入图片描述

Dude类是一个复杂类型,因为值 类型结构Shoe是它的成员, 它们都将存储在堆中。
在这里插入图片描述
当我们执行下面的方法时:
在这里插入图片描述
我们得到了期望的结果:

在这里插入图片描述


如果我们把Shoe换成引用类型呢?**

引用类型测试**

当我们把Shoe改成引用类型时,问题就产生了。
在这里插入图片描述
执行同样上面的Main()方法,结果改变了,如下:
在这里插入图片描述
这并不是我们期望的结果。很明显,出错了!看下面的图解:

在这里插入图片描述
因为现在Shoe是引用类型而不是值类型,当我们进行复制时仅是复制了指针,我们并没有复制指针真正对应的对象。这就需要我们做一些额外的工作使引用类型Shoe像值类型一样工作。
很幸运,我们有一个接口可以帮我们实现:ICloneable。当Dude类实现它时,我们会声明一个Clone()方法用来产生新的Dude复制类。(译外话:复制类及其成员跟原始类不产生任何重叠,即我们所说的深复制) 看下面代码:

在这里插入图片描述
在Clone()方法里,我们创建了一个新的Shoe,克隆所有引用类型变量,复制所有值类型变量,最后返回新的对象Shoe。有些既有类已经实现了ICloneable,我们直接使用即可,如String。因此,我们直接使用Color.Clone()。因为Clone()返回object对象,我们需要进行一下类型转换。
下一步,我们在CopyDude()方法里,用克隆Clone()代替复制:

在这里插入图片描述
再次执行主方法Main():

在这里插入图片描述
我们得到了期望的结果:
在这里插入图片描述
下面是图解:
在这里插入图片描述

整理我们的代码

在实践中,我们是希望克隆引用类型并复制值类型的。这会让你回避很多不易察觉的错误,就像上面演示的一样。这种错误有时不易被调试出来,会让你很头疼。

因此,为了减轻头疼,让我们更进一步清理上面的代码。我们让Dude类实现IConeable代替使用CopyDude()方法:
在这里插入图片描述
在主方法Main()使用Dude.Clone():
在这里插入图片描述
最后得到期望的结果:
在这里插入图片描述


特殊引用类型String

在C#中有趣的是,当System.String 使用操作符“=”时,实际上是进行了克隆(深复制)。你不必担心你只是在操作一个指针,它会在内存中创建一个新的对象。但是,你一定要注意内存的占用问题(译外话:比如为什么在一定情况下我们使用StringBuilder代替String+String+String+String…前者速度稍慢初始化耗多点内存但在大字符串操作上节省内存,后者速度稍快初始化简单但在大字符串操作上耗内存)。如果我们回头去看上面的图解中,你会发现Stirng类型在图中并不是一个针指向另一个内存对象,而是为了尽可能的简单,把它当成值类型来演示了。


总结

在实际工作中,当我们需要复制引用类型变量时,我们最好让它实现ICloneable接口。这样可以让引用类型模仿值类型的使用,从而防止意外的错误产生。你可以看到,慎重得理不同的类型非常重要,因为值类型和引用类型在内存中的分配是不同的。

译文连接:http://www.c-sharpcorner.com/UploadFile/rmcochran/chsarp_memory401152006094206AM/chsarp_memory4.aspx

原文连接:https://blog.csdn.net/leewhoee/article/details/16997323

http://www.yayakq.cn/news/317691/

相关文章:

  • 做网站买计划书电子工程网站
  • 网站统计系统 怎么做外贸企业网站红色风格
  • ps做网站 字体多大会员卡管理系统excel
  • 织梦手机网站如何调用wordpress建站教程费用
  • .net怎么做网站app开发制作系统哪个好
  • 网站seo排名培训厦门快速建网站
  • 无锡建设企业网站福州网站制作服务
  • 网站建设技术员网站设计的企业
  • 基础微网站开发可信赖网站备案 两个域名
  • 阿里巴巴1688桂平百度seo
  • 北京 网站设计飞沐宿州建设网站公司
  • 做网站现在还行吗抖音seo教程
  • 九龙坡区网站建设贵阳网站制作
  • 网站开发做表格示例哪家建站公司好
  • 网站的界面设计怎么做网站服务公司特点
  • 工作室网站源码如何接做网站编程的生意
  • 织梦绿色企业网站模板 苗木企业网站源码 dedecms5.7内核湛江网站制作网站
  • 建设网站平台哪个好网站设计 扁平化
  • 专业做化妆品外包材的招聘网站建设部城市管理监督局网站官网
  • 廊坊网站seo郑州专业建网站
  • 东莞营销网站建设公司武昌网站建设的公司
  • 大丰专业做网站做网站一天
  • 求生之路2怎么做非官方网站交互式网页怎么制作
  • 怎样制作微信网站链接家具网站开发目的
  • 对做网站有什么建议毕业设计可以做哪些网站
  • 网站的不足之处用php做视频网站
  • 陈塘庄做网站公司国内平台有哪些
  • 网站登录人太多进不去怎么办做企业免费网站
  • 宝安网站设计公司3d打印网站开发
  • 网站倒计时怎么做的怎么做游戏试玩网站