c#中浅拷贝和深拷贝的理解
c#中拷贝有浅拷贝和深拷贝之分。
例如对象A,其中有值类型字段和引用类型字段:
1、浅拷贝:
对于值类型字段,直接逐位复制到新拷贝的副本对象中,修改副本的字段的值,不会影响源对象中字段的值;
对于引用类型字段,只复制字段的引用到副本对象中,引用的对象不复制,因为副本和源对象的字段引用的是同一个对象,所以修改副本对象中的字段会影响源对象。
实现:使用Object类MemberwiseClone实现。
2、深拷贝:
对于值类型字段,和浅拷贝的效果一样;
对于引用类型字段,不仅复制字段的引用到副本对象中,也复制引用的对象,所以修改副本的字段,不会影响源对象。
实现:实现ICloneable接口。
值类型变量的赋值操作,执行的是深拷贝操作。
引用类型变量的赋值操作,执行的是浅拷贝操作,但是String特殊,因为String一旦创建就不可变,
而且String类型的源码定义是:public static readonly String Empty,
所以为String赋值是深拷贝。
好记性不如烂笔记,以上只是为自己方便随时查看以便于记忆,如有不恰或错误之处,敬请谅解。
c#中浅拷贝和深拷贝的理解的更多相关文章
- js中浅拷贝和深拷贝以及深拷贝的实现
前言:2019年的第一篇分享... 一.什么是基本类型值和引用类型值?ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型.基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构 ...
- JavaScript中浅拷贝和深拷贝的区别和实现
深拷贝和浅拷贝的区别 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存: 深拷贝(deep copy):复制并创建一个一摸一样的对象,不共 ...
- Java 浅拷贝和深拷贝的理解和实现方式
Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝 ...
- 【转】Java 浅拷贝和深拷贝的理解和实现方式
Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝 ...
- Java中浅拷贝和深拷贝的区别
浅拷贝和深拷贝的定义: 浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.即对象的浅拷贝会对"主"对象进行拷贝,但不会复制主对象 ...
- Python中浅拷贝和深拷贝的区别总结与理解
单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # ...
- 关于js浅拷贝与深拷贝的理解
前端开发中,一般情况下,很少会去在意深拷贝与浅拷贝的关系. 大家知道,js变量有2种数据类型:基本类型和引用类型.基本类型的拷贝是将整个值完全拷贝一份的,也就是深拷贝.就是开辟了新的堆内存.所以基本类 ...
- JS - 浅拷贝与深拷贝的理解以及简单实现方法
前几天撸项目代码时, 由一个技术点间接牵扯出了这东西. 所以就来总结一下. 深拷贝 拷贝对象每个层级的属性. 作用的对象是 js中引用类型的对象,基本类型没有涉及. 本质上将引用类型的对象在堆上重新开 ...
- 初始JAVA中浅拷贝和深拷贝
1. 简单变量的复制 public static void main(String[] args) { int a = 5; int b = a; System.out.println(a); Sys ...
随机推荐
- ural 1143. Electric Path
1143. Electric Path Time limit: 1.0 secondMemory limit: 64 MB Background At the team competition of ...
- What is classical music
quanben's definition of classical music is a definition formed by the following aspects, 1. music wr ...
- ACM 括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=1 ...
- ACM 寻找最大数
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
- HDU - Pseudoforest
Description In graph theory, a pseudoforest is an undirected graph in which every connected componen ...
- 【BZOJ】2956: 模积和
题意 求\(\sum_{i=1}^{n} \sum_{j=1}^{m} (n \ mod \ i)(m \ mod \ j)[i \neq j] \ mod \ 19940417\), \((n, m ...
- NPOI读取excel功能,兼容xls和xlsx
样例: IWorkbook workbook; string fileExt = Path.GetExtension(filePath); try { using (var file = new Fi ...
- js判断图片加载完成后获取图片实际宽高
通常,我们会用jq的.width()/.height()方法获取图片的宽度/高度或者用js的.offsetwidth/.offsetheight方法来获取图片的宽度/高度,但这些方法在我们通过样式设置 ...
- [CareerCup] 17.4 Maximum of Two Numbers 两数中的较大值
17.4 Write a method which finds the maximum of two numbers. You should not use if-else or any other ...
- AJAX联想查询的例子
//通过输入值的不断改变而改变(按键事件)提示内容的功能,然后可以选着你想要的内容填充进来. html主要代码:test1.html <!DOCTYPE html><html> ...