Menyalin Dalaman Objek Tersuai dalam C#
Artikel ini meneroka pengklonan objek dalam C#, memfokuskan pada perbezaan antara rujukan dan jenis nilai dan cara untuk mencapai salinan dalam sebenar objek tersuai. Kami akan menggunakan contoh untuk menggambarkan kelakuan kedua-dua MyClass
(jenis rujukan) dan myStruct
(jenis nilai) apabila ditugaskan. Seperti yang dijangkakan, perubahan pada contoh jenis rujukan ditunjukkan dalam rujukan lain kerana ia berkongsi lokasi memori yang sama. Walau bagaimanapun, jenis nilai mencipta salinan bebas.
Untuk mencipta salinan tulen objek tersuai, kami melaksanakan antara muka ICloneable
. Ini memerlukan mentakrifkan kaedah Clone
yang menjana tika baharu dengan nilai sifat yang sama.
Melaksanakan ICloneable
untuk Penyalinan Dalam
Kod berikut menunjukkan pelaksanaan ICloneable
untuk salinan dalam, mengendalikan objek bersarang:
<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()
mencipta salinan cetek. Untuk mencapai salinan dalam, anda mesti mengklon secara eksplisit sebarang objek bersarang dalam kaedah Clone
, seperti yang ditunjukkan dalam contoh yang diulas. Ini memerlukan pengklonan rekursif jika objek bersarang juga mengandungi objek bersarang.
Mencipta salinan dalam menggunakan kaedah Clone
:
<code class="language-csharp">MyClass a = new MyClass(); MyClass b = (MyClass)a.Clone();</code>
Ini memastikan b
ialah salinan bebas sepenuhnya a
, walaupun a
mengandungi struktur bersarang yang kompleks. Ingat untuk menyesuaikan bahagian pengklonan objek bersarang kepada struktur kelas khusus anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Salinan Dalam Objek Tersuai dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!