关于copy和clone
来源:互联网 发布:java项目收获 编辑:程序博客网 时间:2024/05/18 09:17
在软件世界中,这两个概念对于我们来说并不陌生,如.NET中的Object.MemberwiseClone()、prototype设计模式的clone等,copy就更常见了,如copy一段文字等。
从本质上来说,copy和clone是完全相同的,都是利用某种机制创建出一个新的对象。既然区别不在本质概念,那么它们之间的区别必然体现为两个方面,一个是“how”,另外一个是和外界环境紧密关联的“why”。
从“how”这个方面来说:
- copy是根据已有对象的属性构造出一个新的对象,这个对象拥有已有对象的所有属性,但是并不包括这个对象引用的外部的属性。如我们copy一篇文稿时我们并不需要将引文也复制过来,很显然我们并不关心这些引文的真实的内容。
- clone也是根据已有对象的属性构造出一个新的对象。不同于copy的时候,clone后产生的新对象不但拥有已有对象的所有属性,而且还包括已有对象所引用对象的所有属性。
从“why”这个方面来说:
- copy产生的对象并不包括原对象所引用的对象的属性,所有新产生的对象缺乏自我表达的能力,也就是说它只能和引用的对象处于同一个上下文中。如copy得到的A和引用对象B往往位于同一个文档中。
- clone产生的对象因为具有自我表达的能力,因此它和引用对象不必处于同一个上下文中。如我们可以使用clone来实现两个不同不同文档之间的数据交换。
因为在软件开发中,概念过多往往会导致软件本身变得更复杂,因为在现实的开发中,我们只需要采纳其中的一个概念即可,而对于另外一个概念我们只需要加一个形容词修饰即可得到。如:
- “shallow copy”=copy;“deep copy”=clone
- “memberwise clone”=copy;“clone”=clone
- 关于copy和clone
- Copy 和Clone
- COPY,CLONE
- C# DataTable.Copy()和.Clone()的使用
- opencv中clone和copy的区别
- C# 中DataTable 的copy()方法和clone()方法
- OpenCV中操作Mat的copy()和clone()的区别
- 深拷贝(deep clone)和浅拷贝(shallow copy)
- Arrays.copy()和ArrayList.clone()的使用区别
- clone()方法copy
- java deep copy&clone
- 20 Copy Clone
- copy与clone
- 澄清整理关于clone(),Clonable和CloneNotSupportedException
- 澄清整理关于clone(),Clonable和CloneNotSupportedException
- Java Clone, Shallow Copy and Deep Copy
- 关于clone
- C# copy() 与 Clone()区别
- (算法)辗转相除法求最大公约数和最小公倍数
- 构件与够贱
- Effective C#中文版:改善C#程序的50种方法
- 2 Be A IT Boy
- asp.net 遍历文件夹(含子文件夹)所有文件
- 关于copy和clone
- Asp备份与恢复SQL Server数据库
- 在测试实验室中设置 VPN 远程访问的循序渐进指南
- asp.net身份验证和授权
- Symbian S60开发,在真机上显示panic异常信息。
- 16个经典面试问题回答思路 [转载]
- 写了个15位身份证号升级为18位的SQL语句
- 网页上的提示框
- cronolog安装配置