深复制VS浅复制(MemberwiseClone方法介绍)
MemberwiseClone方法,属于命名空间System,存在于程序集 mscorlib.dll中。返回值是System.Object。其含义是:创建一个当前object对象的浅表副本。
MSDN中的官方解释是:
MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。
例如:考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象 X2,该对象也引用对象 A 和 B。相比而言,X 的深层副本创建一个新对象 X2,该对象引用新对象 A2 和 B2(分别为 A 和 B 的副本)。B2 又引用新对象 C2,C2 是 C 的副本。该示例阐释了浅层和深层复制操作之间的区别。
有很多方法可以实现深层复制操作,前提是浅表复制操作由MemberwiseClone 方法执行但不符合您的需求。这些要求包括:
1、调用要复制的对象的类构造函数以创建含有从第一个对象中提出的属性值的第二个对象。这假定对象的值完全由类构造函数定义。
2、调用MemberwiseClone 方法创建的对象的浅表副本,然后将指定新的对象,其值均相同,原始对象的任何属性或字段的值是引用类型。该示例中的DeepCopy 方法阐释了这种方法。
3、序列化要深层复制的对象,然后将序列化的数据还原到另一个对象变量。
4、 使用带递归的反射执行的深层复制操作。
估计看到这你早就已经是晕的不行了吧!呵呵,本菜鸟也是这样滴……在自己的不懈努力之下,并且从实例中试验过后才弄明白,原来这个所谓的浅复制和深复制是如此的简单啊!
其实,用咱们在windows操作系统中使用的快捷方式和源文件的关系来理解就简单了!相信大家从玩电脑开始可能都遇到过这样的尴尬局面,就是用u盘复制了电脑的文件,然后兴高采烈的去打印,然后一到打印店打开u盘中复制到的文件,“纳尼!怎么打不开呢!原来是自己复制了一个快捷方式,额&……”(哈哈……说到这,估计有的人就非常有共鸣了啦!是吧?)
快捷方式:其实就相当于是引用源文件,快捷方式中并不存在源文件对象,只是存放了一个源文件的地址,这个地址指向源文件,当你双击的时候,windows会根据这个地址去你的电脑寻找这个源文件并打开。只复制一个快捷方式,这就相当于是浅复制啦
复制源文件:将文件的数据都复制过来,这就是所谓的深复制。
有关深复制和浅复制的详细内容请参看本人以下博客:
大话设计模式—原型模式
深复制VS浅复制(MemberwiseClone方法介绍)相关推荐
- python列表浅复制_Python列表的深复制和浅复制示例详解
一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...
- 【PHP】 php深复制和浅复制
声明:本文是转载. 原文地址:http://www.2cto.com/kf/201110/109659.html 此文将由浅入深的讨论PHP5的对象复制技术 原创文章 请尊重版权 有错误或则不当之 ...
- php对象当参数传递 php深复制和浅复制
把对象当参数传递给方法,在方法里改过对象后,影响到外面的对象 因为对象是引用传递过去的 class Book {public $name;public function __construct($n ...
- python list 深复制_Python列表的深复制和浅复制示例详解
免费资源网,https://freexyz.cn/ 一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码 ...
- C++学习基础七——深复制与浅复制
C++学习基础七--深复制与浅复制 一.深复制与浅复制基本知识 深复制和浅复制,又称为深拷贝和浅拷贝. 深复制和浅复制的区别如下图1所示: 图1 图1表示的是,定义一个类CDemo,包含int a和c ...
- Objective-C 深复制和浅复制与NSCopying协议
1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全. 2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopyin ...
- iOS 集合的深复制与浅复制
2019独角兽企业重金招聘Python工程师标准>>> 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对 ...
- IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)
1. copy.mutableCopy方法 copy方法返回对象的不可修改的副本 mutableCopy方法返回的对象可修改的副本 1).测试demo int main(int argc, char ...
- JavaScript深复制和浅复制
深复制:直接将数据复制给对应的变量 浅复制:将数据的地址复制给对应的变量 深复制与浅复制,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变, ...
最新文章
- 自动驾驶高清地图问题的研究
- 谷歌最新提出无需卷积、注意力,纯MLP构成的视觉架构!网友:MLP is All You Need?
- 计算机软考网络工程师历年真题,计算机软考《网络工程师》考试历年真题精选(1)...
- git branch 为什么会进入编辑状态_最好的Git分支管理教程
- ***jquery选择器 之 获取父级元素、同级元素、子元素
- GDC2016 【巫师3 狂猎】的游戏事件工作流
- (福利)中秋灯谜,猜中有奖
- 简单介绍Linux进程文件路径的获取方法
- XAMPP中mysql升级到5.7.36版本
- 锐捷linux网卡,突破锐捷客户端检测多网卡,可实现多网卡同时上网
- 数字图像处理-运动模糊逆滤波维纳滤波(Matlab)
- VSCode中安装Django插件后实现html语法提示
- CLOSE_WAIT状态的原因与解决方法
- PX4原生固件,position_estimator_inav解读
- SAT词汇备考之(Barrons)巴朗3500基础词汇(List 49)
- 什么是库存周转率周转天数?
- 规格书搜索网站分享和体验
- 如何把两个PDF合成一个PDF文件
- hpet 定时器中断 8259 linux,[OSDEV]编程高精度定时器(HPET)
- Magik Eye将在2019年嵌入式视觉峰会上宣布突破性的3D感应技术Invertible Light™