博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ICloneable.Clone()--------克隆

Posted on 2008-09-27 12:31  陈 亮  阅读(604)  评论(0编辑  收藏  举报

克隆是创建作为当前实例副本的新对象。

克隆分为深度克隆和浅度克隆

深度克隆:会克隆当前实例的所有所有成员.

浅度克隆:只会克隆当前实例的所有值类型的.


浅度克隆Object类为我们提供了一个受保护的克隆方法MemberwiseClone()

深度克隆要我们自己实现

实现深度克隆的方式一般有2种... (我只知道2种... 如果你知道另外几种,请回复告诉我..)

我来创建2个类

Address类  有2个属性 Province 和City

 

 

Code

 

Person 类有3个属性  Name 、Age、Address 

 

Code

 

我们现在来让Person实现克隆

在Person类中加入

 

 

Code

这个方法就可以实现克隆了 

 这个方法是利用序列化和反序列化来实现克隆 比较方便但是类必须用[Serializable]标记可以序列化

令一种方式

Code

 这种方式容易出错 当一个类的成员过多时容易出错。当你要修改类的成员时,这个克隆方法也要修改 。

建议用第序列化的方式来实现克隆。

浅度克隆就很简单了 调用受保护的克隆方法MemberwiseClone()就可以了

 

Code