深复制VS浅复制(MemberwiseClone方法介绍)
MemberwiseClone方法,屬于命名空間System,存在于程序集 mscorlib.dll中。返回值是System.Object。其含義是:創建一個當前object對象的淺表副本。
MSDN中的官方解釋是:
MemberwiseClone 方法創建一個淺表副本,方法是創建一個新對象,然后將當前對象的非靜態字段復制到該新對象。如果字段是值類型的,則對該字段執行逐位復制。如果字段是引用類型,則復制引用但不復制引用的對象;因此,原始對象及其復本引用同一對象。
例如:考慮引用對象 A 和 B 的被稱為 X 的對象。對象 B 依次引用對象 C。X 的淺表副本創建一個新對象 X2,該對象也引用對象 A 和 B。相比而言,X 的深層副本創建一個新對象 X2,該對象引用新對象 A2 和 B2(分別為 A 和 B 的副本)。B2 又引用新對象 C2,C2 是 C 的副本。該示例闡釋了淺層和深層復制操作之間的區別。
有很多方法可以實現深層復制操作,前提是淺表復制操作由MemberwiseClone 方法執行但不符合您的需求。這些要求包括:
1、調用要復制的對象的類構造函數以創建含有從第一個對象中提出的屬性值的第二個對象。這假定對象的值完全由類構造函數定義。
2、調用MemberwiseClone 方法創建的對象的淺表副本,然后將指定新的對象,其值均相同,原始對象的任何屬性或字段的值是引用類型。該示例中的DeepCopy 方法闡釋了這種方法。
3、序列化要深層復制的對象,然后將序列化的數據還原到另一個對象變量。
4、 使用帶遞歸的反射執行的深層復制操作。
估計看到這你早就已經是暈的不行了吧!呵呵,本菜鳥也是這樣滴……在自己的不懈努力之下,并且從實例中試驗過后才弄明白,原來這個所謂的淺復制和深復制是如此的簡單啊!
其實,用咱們在windows操作系統中使用的快捷方式和源文件的關系來理解就簡單了!相信大家從玩電腦開始可能都遇到過這樣的尷尬局面,就是用u盤復制了電腦的文件,然后興高采烈的去打印,然后一到打印店打開u盤中復制到的文件,“納尼!怎么打不開呢!原來是自己復制了一個快捷方式,額&……”(哈哈……說到這,估計有的人就非常有共鳴了啦!是吧?)
快捷方式:其實就相當于是引用源文件,快捷方式中并不存在源文件對象,只是存放了一個源文件的地址,這個地址指向源文件,當你雙擊的時候,windows會根據這個地址去你的電腦尋找這個源文件并打開。只復制一個快捷方式,這就相當于是淺復制啦
復制源文件:將文件的數據都復制過來,這就是所謂的深復制。
有關深復制和淺復制的詳細內容請參看本人以下博客:
大話設計模式—原型模式
總結
以上是生活随笔為你收集整理的深复制VS浅复制(MemberwiseClone方法介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话设计模式—原型模式
- 下一篇: 大话设计模式—代理模式