首頁 >後端開發 >C++ >在處理參考類型時,如何在 C# 中建立物件的真實副本?

在處理參考類型時,如何在 C# 中建立物件的真實副本?

Barbara Streisand
Barbara Streisand原創
2025-01-13 12:33:52979瀏覽

How Do I Create True Copies of Objects in C# When Dealing with Reference Types?

C# 中的物件克隆:理解引用型別

在 C# 中,物件主要為引用類型,這表示它們引用儲存其資料的記憶體位置。這與值類型形成對比,值類型直接在其變數中包含其資料。當建立引用類型的副本時,它只會建立引用的副本,而不是它指向的實際資料。

範例:理解引用型別

考慮以下程式碼:

<code class="language-csharp">public class MyClass
{
    public int val;
}

public struct myStruct
{
    public int val;
}

public class Program
{
    public static void Main(string[] args)
    {
        MyClass objectA = new MyClass();
        MyClass objectB = objectA;

        objectA.val = 10;
        objectB.val = 20;

        Console.WriteLine($"objectA.val = {objectA.val}");
        Console.WriteLine($"objectB.val = {objectB.val}");
    }
}</code>

這段程式碼的輸出顯示,儘管進行了更改,但 objectA 和 objectB 具有相同的值,這表明它們引用的是同一個記憶體位置。

複製引用型別物件

要建立與原始物件不同的參考類型物件的副本,需要複製該物件。這涉及創建一個新對象,該對象具有與原始對象相同的屬性和值,但存儲在單獨的內存位置。

使用 ICloneable 介面

在 C# 中,可以使用 ICloneable 介面複製物件。實作此介面的類別提供一個 Clone 方法,該方法會建立物件的副本。

以下是 ICloneable 介面的範例:

<code class="language-csharp">public class MyClass : ICloneable
{
    public string test;

    public object Clone()
    {
        return this.MemberwiseClone();
    }
}</code>
<code class="language-csharp">MyClass a = new MyClass();
MyClass b = (MyClass)a.Clone();</code>

在此範例中,ICloneable 介面提供的 Clone 方法被重寫以建立一個與原始物件具有相同屬性的新對象,從而有效地複製該物件。

以上是在處理參考類型時,如何在 C# 中建立物件的真實副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn