第9章 浅度和深度复制

第9章  第185页

从一个变量到另外一个变量按值复制对象,而不是按引用复制对象(即以与结构相同的方式复制)可能非常复杂。因为一个对象可能包含许多其他对象的引用,例如,字段成员等,这将涉及许多繁琐的操作。把每个成员从一个对象复制到另外一个对象中可能不会成功,因为其中一些成员可能是引用类型。

.Net Framework考虑了这个问题。简单地按照成员复制对象可以通过派生于System.Object的MemberwiseClone()方法来完成,这是一个受保护的方法,但很容易在对象上定义一个调用该方法的公共方法。这个方法提供的复制功能称为浅度复制,因为它没有考虑引用类型成员。因此,新对象中的引用成员就会指向与源对象中相同成员的对象,在许多情况下这并不理想。如果要创建成员的新实例,就应复制值,而不复制引用,此时需要使用深度复制。

可以实现一个ICloneable接口,以标准的方式来进行。如果使用这个接口,就必须实现它包含的Clone()方法。这个方法返回一个类型为System.Object的值。我们可以采用各种处理方式,执行所选的任何一个方法体得到这个对象。如果愿意,就可以进行深度复制(但执行过程不是必选的,所以可以按照需要执行浅度复制)。详见第11章

 

原型模式  Protype Pattern

http://www.cnblogs.com/zhili/p/PrototypePattern.html

posted @ 2014-10-28 08:52  ChuckLu  阅读(238)  评论(0编辑  收藏  举报