【.NET基础】——ShadowCopy And DeepCopy

在介绍.NET平台下的ShadowCopy And DeepCopy之前,我们先来了解两个概念——值类型 and 引用类型。

值类型 and 引用类型

在CLR中支持两种类型,值类型 and 引用类型。很明显从图中可以看出两者是独立出来的,在.NET层次结构中的

位置不同,那其分配内存的方式也是不同的。

引用类型:从托管堆中分配内存空间来保存它的实例,然后通过一个类似指针的变量来引用它。

值类型:轻量级变量类型,主要从线程的堆栈中分配内存空间,不需要变量来引用。

区别:

(1)引用类型继承于System.Object类,而值类型继承于System.Object的子类System.ValueType类;

(2)值类型有两种表现形式:拆箱和装箱。而引用类型只有装箱;

(3)值类型不可以被继承,也不可以继承其他类型,不可以有虚方法,方法不可以被重写。而引用类型这些都可以;

(4)引用类型初始化时Null,而值类型初始化为0;

(5)值类型变量进行赋值时,所有成员的值都被复制,而引用类型变量赋值时,只是简单地复制指向一个对象

的引用。

上面简单介绍了一下值类型 and 引用类型。由于值类型进行复制时,所有成员都被复制,就不在这里讨论了,

本篇博客主要介绍引用类型的ShadowCopy And DeepCopy。

ShadowCopy And DeepCopy

ShadowCopy

简单的说ShadowCopy就是复制的一个引用地址,例如我们将文件夹的快捷方式复制到桌面上,在原文件夹里添加

文件,桌面的快捷方式文件夹里的文件也会做相应的改变。其实,两个是指向的同一个地址。如果原文件夹被销毁,

那么桌面的快捷方式也就不能打开了。也就是我们常说的“影子克隆”。

DeepCopy

DeepCopy不仅是引用地址被拷贝出来,连同文件夹里的文件一同被拷贝,这时候拷贝出的文件夹和原文件夹是两

个不同的对象,二者之间相互独立。我们的值类型变量赋值就是运用的DeepCopy。也称“深度克隆”。

总结

  快捷方式虽好,但要慎用,还是深度克隆比较保险些。

  虽然,设计模式已经学完,但是也遗留了一些问题,有待自己好好研究,对于深浅复制理解的差不多,但是实际

写起代码来还是有一些问题的,继续加油吧!

时间: 2024-08-09 21:31:43

【.NET基础】——ShadowCopy And DeepCopy的相关文章

Python: names, values, assignment and mutability

推荐先看视频(youtube) Ned Batchelder - Facts and Myths about Python names and values - PyCon 2015 Change variable # rebinding x = x + 1 # mutating nums.append(7)# can also rebind lists:nums = nums + [7]# but you can't mutate immutable make a new list, don'

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

python基础-02

常见的数据类型 列表 在python中,列表的创建可以是由[]两个方括号组成的.在其他语言中,被称之为数组. 列表里可以存放一组值,并且系统默认的给列表里的每一个元素以索引值,方便查找和使用. 如下: #创建一个列表,并且保存一定的数据 user_list = ['刘德华','张学友','张靓颖','郭富城','李白'] print(user_list) #['刘德华', '张学友', '张靓颖', '郭富城', '李白'] #根据索引值来读取数据 print(user_list[0])#刘德华

JavaScript基础-前端开发

理解作用域 理解作用域链是Js编程中一个必须要具备的,作用域决定了变量和函数有权力访问哪些数据.在Web浏览器中,全局执行环境是window对象,这也意味着所有的全局变量或者方法都是window对象的属性或方法.当一个函数在被调用的时候都会创建自己的执行环境,而这个函数中所写的代码就开始进入这个函数的执行环境,于是由变量对象构建起了一个作用域链. var wow = '魔兽世界'; var message = function(){ var _wow = '123'; } 在这个例子中全局环境中

Python基础教程【读书笔记】 - 2016/7/31

希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括一组模块,称为标准库standard library.展示这些模块的工作方式,讨论如何分析它们,学习它们所提供的功能. [10.1] 模块 已经知道如何创建和执行自己的程序,也学会了怎么用import从外部模块获取函数并且为自己的程序使用.接下来看看怎么编写自己的模块. [10.1.1] 模块是程序

Python基础教程【读书笔记】 - 2016/7/19

希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第八波:第4章  字典:当索引不好用时 将学到一种通过名字引用值的数据结构,这种结构类型称为映射mapping.字典是Python内唯一内建的映射类型.字典中的值并没有特殊的顺序,都是存储在一个特定的键key里.键可以使 数字.字符串甚至是元组. [4.1] 字典的使用 字典有时比列表更加使用. [4.2] 创建和使用字典 字典由多个键及其对应的值构成的对组成(也把键/值对称为项).每个键和它的值之间用冒号隔开,项之

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

Python基础篇(八)

key words:私有变量,类静态变量,生成器,导入Python模块,r查看模块可以使用的函数,查看帮助信息,启动外部程序,集合,堆,时间模块,random模块,shelve模块,文件读取等 >>> class Rectangle: ...     def __init__(self): ...         self.__width = 0 ...         self.__height = 0 ...     def setSize(self,width,height): .