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中文網其他相關文章!