在 C# 中深度複製自訂物件
本文探討了 C# 中的物件克隆,重點關注引用類型和值類型之間的區別以及如何實現自訂物件的真正深拷貝。 我們將使用範例來說明 MyClass
(引用型別)和 myStruct
(值型別)在賦值時的行為。 如預期的那樣,對引用類型實例的變更會反映在其他引用中,因為它們共享相同的記憶體位置。然而,值類型會建立獨立的副本。
為了建立自訂物件的真實副本,我們實作 ICloneable
介面。這需要定義一個 Clone
方法來產生具有相同屬性值的新實例。
實作 ICloneable
進行深度複製
以下程式碼示範如何實作 ICloneable
進行深層複製,處理巢狀物件:
<code class="language-csharp">class MyClass : ICloneable { public string test; public object Clone() { MyClass newObj = (MyClass)this.MemberwiseClone(); // Shallow copy first // Handle nested objects for a deep copy (example) // if (this.nestedObject != null) // { // newObj.nestedObject = (NestedObjectType)this.nestedObject.Clone(); // } return newObj; } }</code>
MemberwiseClone()
建立淺副本。 要實現深層複製,您必須明確複製 Clone
方法中的任何嵌套對象,如註釋範例中所示。 如果嵌套物件也包含嵌套對象,則需要遞迴克隆。
使用Clone
方法建立深層副本:
<code class="language-csharp">MyClass a = new MyClass(); MyClass b = (MyClass)a.Clone();</code>
這確保了 b
是 a
的完全獨立的副本,即使 a
包含複雜的巢狀結構。 請記住使嵌套物件克隆部分適應您的特定類別結構。
以上是如何在 C# 中建立自訂物件的深層副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!