• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c# 深拷贝与浅拷贝的区别分析及实例

c# 深拷贝与浅拷贝的区别分析及实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#拷贝文件,c#深拷贝,c#数组拷贝,c#深度拷贝,c#list拷贝等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

      深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一个人,叫李四,不管是张三缺胳膊少腿还是李四缺胳膊少腿都不会影响另外一个人。比较典型的就是Value(值)对象,如预定义类型Int32,Double,以及结构(struct),枚举(Enum)等。

      浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉。

      C#中有两种类型变量,一种 是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘复制;而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此 对于后者进行真正copy的时候,也是最费事的,具体的说,必须为其实现ICloneable接口中提供的Clone方法。

看看定义:
      浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
      深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

浅拷贝和深拷贝的区别
      浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象 中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建一 个新的和原是对象中对应字段相同(内容相同)的字段,也就是说这个引用和原是对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始对 象中对应字段的内容。所以对于原型模式也有不同的两种处理方法:对象的浅拷贝和深拷贝。

下面通过实例可以清楚看到浅拷贝与深拷贝的区别,代码如下:

           &nbs

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# 拷贝数组的几种方法(总结)
  • C#实现屏幕拷贝的方法
  • C#将指定目录所有文件名转换成小写的方法
  • C#遍历指定目录下所有文件的方法
  • C#获取指定目录最后写入时间的方法
  • C#获取项目指定目录下文件的方法
  • C#浅拷贝和深拷贝实例解析
  • c#深拷贝文件夹示例
  • c# 深拷贝与浅拷贝的区别分析及实例

相关文章

  • 2017-05-28C#读写config配置文件的方法
  • 2017-05-28C#实现TIF图像转PDF文件的方法
  • 2017-05-28C# 连接SQL数据库的方法及常用连接字符串
  • 2017-05-28c#初学简单程序实例代码介绍
  • 2017-05-28mvc C# JavaScript LigerUI oracle实现用户的注册、登陆验证、登陆
  • 2017-05-28C#集合遍历时删除和增加元素的方法
  • 2017-05-28c#中的浮点型转整形的舍取 四舍五入和银行家舍入实现代码
  • 2017-05-28C#虚方法的声明和使用实例教程
  • 2017-05-28c# 备忘录模式
  • 2017-05-28C#形状原点变换的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入解析C#中的交错数组与隐式类型的数组
    • c#数组详解
    • C#调用windows api关机(关机api)示例代码分享
    • C#之Expression表达式树实例
    • C#实现启动,关闭与查找进程的方法
    • C#形状原点变换的方法
    • C#字符串内存分配与驻留池学习分享
    • C#实现实体类与字符串互相转换的方法
    • C#判断系统是32位还是64位的方法
    • C#清除字符串内空格的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有