C#中物件的複製:深入分析
以下程式碼片段示範了一個場景:兩個物件參考 objectA
和 objectB
指向 MyClass
類別的相同實例。對於C#中的引用類型,這是常見行為,因為它們只引用記憶體位置,而不是包含資料本身。然而,在某些情況下,需要建立物件的完全獨立副本,並指向不同的記憶體位址。
使用ICloneable進行淺複製
為了實現淺複製(只複製原始物件非引用型別成員的狀態),C# 提供了 ICloneable
介面。實作此介面允許類別定義自訂克隆行為。
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>
MemberwiseClone
方法執行物件的淺複製,複製所有非引用型別成員的值。透過實作 ICloneable
並使用 MemberwiseClone
覆寫其 Clone
方法,我們為 MyClass
類別建立了一個自訂克隆機制。
建立獨立物件
要建立 MyClass
的獨立實例,請使用 Clone
方法:
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
這將使 objectB
引用 MyClass
的新實例,該實例與 objectA
具有不同的記憶體位址。但是,必須注意,這是一個淺複製,這意味著物件內的任何引用類型成員仍然指向與原始物件相同的記憶體位置。要實現深複製,通常需要對引用類型成員進行進一步的複製操作。
以上是如何在 C# 中建立物件的真實副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!