Menyalin objek dalam C#: analisis mendalam
Coretan kod berikut menunjukkan senario di mana dua rujukan objek objectA
dan objectB
menunjuk kepada tika yang sama bagi kelas MyClass
. Ini adalah tingkah laku biasa untuk jenis rujukan dalam C# kerana ia hanya merujuk kepada lokasi memori dan bukannya mengandungi data itu sendiri. Walau bagaimanapun, dalam beberapa kes, adalah perlu untuk membuat salinan bebas sepenuhnya objek, menunjuk ke alamat memori yang berbeza.
Gunakan ICloneable untuk salinan cetek
Untuk melaksanakan penyalinan cetek (hanya menyalin keadaan ahli jenis bukan rujukan objek asal), C# menyediakan antara muka ICloneable
. Melaksanakan antara muka ini membolehkan kelas untuk menentukan tingkah laku pengklonan tersuai.
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>
MemberwiseClone
melakukan salinan cetek objek, menyalin nilai semua ahli jenis bukan rujukan. Kami mencipta mekanisme pengklonan tersuai untuk kelas ICloneable
dengan melaksanakan MemberwiseClone
dan mengatasi kaedah Clone
nya dengan MyClass
.
Buat objek bebas
Untuk mencipta contoh kendiri MyClass
, gunakan kaedah Clone
:
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
Ini akan menjadikan objectB
merujuk kepada kejadian baharu MyClass
yang mempunyai alamat memori yang berbeza daripada objectA
. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ini adalah salinan cetek, yang bermaksud bahawa mana-mana ahli jenis rujukan dalam objek masih menunjuk ke lokasi memori yang sama dengan objek asal. Untuk melaksanakan salinan mendalam, penyalinan lanjut ahli jenis rujukan biasanya diperlukan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Salinan Sebenar Objek dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!