Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencipta Salinan Dalam Objek Tersuai dalam C#?

Bagaimanakah Saya Boleh Mencipta Salinan Dalam Objek Tersuai dalam C#?

Linda Hamilton
Lepaskan: 2025-01-13 12:22:43
asal
113 orang telah melayarinya

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

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan