首頁 > 後端開發 > C++ > 如何在 C# 中建立自訂物件的深層副本?

如何在 C# 中建立自訂物件的深層副本?

Linda Hamilton
發布: 2025-01-13 12:22:43
原創
111 人瀏覽過

How Can I Create a Deep Copy of a Custom Object in C#?

在 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>
登入後複製

這確保了 ba 的完全獨立的副本,即使 a 包含複雜的巢狀結構。 請記住使嵌套物件克隆部分適應您的特定類別結構。

以上是如何在 C# 中建立自訂物件的深層副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板