ICloneable接口的浅拷贝与深拷贝

来源:互联网 发布:linux内核修改cpu频率 编辑:程序博客网 时间:2024/05/12 03:26
ICloneable接口支持克隆,即用与现有实例相同的值创建类的新实例。ICloneable 接口包含一个成员Clone,它用于支持除 MemberwiseClone创建当前Object的浅表副本)所提供的克隆之外的克隆。MSDN上给出MemberwiseClone方法的解释是MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

下面先介绍下有关克隆、 深与浅副本,1.浅拷贝:将对象的字段复制到副本(新的对象)中,同时将字段的值也赋值过去,但是引用类型字段只复制引用,而不是引用类型本身。这意味着,源对象引用类型字段的值改变了,会影响到副本中对应的值也改变;2.深拷贝:将对象的字段复制到副本(新的对象)中,无论是值类型还是引用类型字段,都会复制类型本身及类型的值。这意味着,源对象引用类型字段的值改变了,不会影响到副本中对应的值。

那么实现了ICloneable接口的中的Clone是浅拷贝还是深拷贝呢?官方的解释是:你既可以在Clone方法中实现浅拷贝,也可以实现深拷贝。