作者:vuefine
文献:msdn
平台:.NET 2.0+
.NET中有很多对象都实现了IClonable接口,这意味着它们能实现复制功能,比如说ArrayList对象( 用C#描述数据结构3:ArrayList),或自己编写实现了IClonable接口的对象。
查看ArrayList中关于Clone方法的介绍:
创建 System.Collections.ArrayList 的浅表副本。
很好奇,浅表副本的概念,上msdn查阅后,解释的意思比较晦涩一点,浅表复制集合是指仅仅复制集合元素,不管元素是值类型还是引用类型,但是Clone并不会复制对象(引用指向的对象)。新Clone后的集合中,引用还是指向同一个对象(原来集合中引用指向的对象)。
A shallow copy of a collection copies only the elements of the collection, whether they are reference types or value types, but it does not copy the objects that the references refer to. The references in the new collection point to the same objects that the references in the original collection point to.
一句话概括,Clone实现的所谓浅表副本,Clone出来的对象复制了值类型,复制了引用,而未复制引用对象。这个时候,可能就要问了,未复制引用对象是什么意思?通过代码是最好说明问题的,请看下面的代码,