使用序列化和反序列化機制深度複製物件

2022-04-03 03:03:30 字數 601 閱讀 6003

由於值型別和引用型別在賦值上的不同。在clone乙個物件的引用型別的成員時,一般只是簡單的賦值對物件的引用。此時原有的物件和新賦值的物件會同時引用同乙個成員物件。這種物件clone的方法一般稱為淺賦值或淺表複製。在大多數情況下淺賦值並不是我們希望的clone方式。

為了實現深度複製,我們就必須遍歷有相互引用的物件構成的圖,並需要處理其中的迴圈引用結構。這無疑是十分複雜的。幸好借助.net的序列化和反序列化機制,可以十分簡單的深度clone乙個物件。原理很簡單,首先將物件序列化到記憶體流中,此時物件和物件引用的所用物件的狀態都被儲存到記憶體中。.net的序列化機制會自動處理迴圈引用的情況。然後將記憶體流中的狀態資訊反序列化到乙個新的物件中。這樣乙個物件的深度複製就完成了。

下面是**:

1public

static

object

clone(

object

obj)27

8iformatter format 

=new

binaryformatter();

9using

(stream stream 

=new

memorystream())

101617}

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化和反序列化

先定義乙個類 serializable xmlroot shintech public class person set public string name set public person this 0,string.empty public person int m age,string m...

序列化和反序列化

引文來自 序列化和反序列化我們可能經常會聽到,其實通俗一點的解釋,序列化就是把乙個物件儲存到乙個檔案或資料庫欄位中去,反序列化就是在適當的時候把這個檔案再轉化成原來的物件使用。using system using system.collections using system.text namesp...