Isi kandungan:
Definisi - Apakah maksud Salinan Dalam?
Salinan mendalam, dalam C #, merujuk kepada teknik yang mana satu salinan objek dicipta sedemikian rupa sehingga mengandungi salinan kedua-dua anggota contoh dan objek yang ditunjuk oleh ahli rujukan.
Salinan yang mendalam dimaksudkan untuk menyalin semua unsur objek, termasuk unsur-unsur yang dirujuk secara langsung (jenis nilai) dan unsur-unsur rujukan secara tidak langsung dari jenis rujukan yang memegang rujukan (penunjuk) ke lokasi memori yang mengandungi data dan bukannya mengandungi data itu sendiri. Salin dalam digunakan dalam senario di mana salinan baru (klon) dibuat tanpa sebarang rujukan kepada data asal.
Techopedia menerangkan Deep Copy
Salinan yang mendalam berbeza daripada salinan cetek mengikut cara ahli jenis rujukan objek disalin. Semasa menyalin ahli bidang jenis nilai dalam kedua-dua kes, salinan medan bit demi bit dilakukan. Apabila menyalin bidang jenis rujukan, salinan cetek melibatkan hanya menyalin rujukan, sedangkan dalam salinan yang mendalam, salinan baru objek yang dirujuk dilakukan.
Salinan mendalam boleh digambarkan dengan contoh dengan mempertimbangkan objek Kakitangan yang mempunyai AddressInfo sebagai ahli jenis rujukan bersama dengan jenis nilai yang lain. Salinan yang mendalam Pekerja membuat objek baru, Pekerja2, dengan ahli jenis nilai yang sama dengan Pekerja tetapi merujuk objek baru, AddressInfo2, yang merupakan salinan AddressInfo.
Salinan mendalam boleh dilaksanakan menggunakan mana-mana kaedah berikut:
- Salinan pembina kelas boleh dilaksanakan dengan logik yang diperlukan untuk menyalin ahli kedua-dua nilai dan rujukan (selepas peruntukan memori yang betul) jenis. Kaedah ini membosankan dan mudah dijangkiti.
- Kaedah System.Object.MemberwiseClone boleh digunakan untuk menyalin jenis nilai bukan ahli. Salinan objek jenis rujukan boleh diwujudkan dan diberikan dengan set nilai yang sama seperti yang asal
- Objek yang perlu disalin mendalam boleh disiarkan dan diseragamkan ke objek baru dengan memulihkannya. Kaedah ini adalah automatik dan tidak memerlukan perubahan kod untuk pengubahsuaian dalam ahli objek tetapi lebih lambat daripada kaedah lain dan memerlukan objek klonik untuk bersiap serasi
- Refleksi dengan rekursi boleh digunakan untuk mendapatkan salinan cetek, di mana titik kod tambahan yang diperlukan untuk salinan mendalam boleh ditambah. Kaedah ini adalah automatik dan tidak memerlukan perubahan kod untuk sebarang penambahan atau penyingkiran medan dalam objek. Ia lebih perlahan dan tidak dibenarkan dalam persekitaran amanah separa
- Kod bahasa perantaraan boleh digunakan, yang lebih cepat tetapi menghasilkan kebolehbacaan kod yang lebih rendah dan penyelenggaraan yang sukar
Untuk melaksanakan salinan yang mendalam:
- Objek harus jelas dan tidak boleh sewenang-wenangnya
- Sifat objek tidak akan dipertimbangkan
- Pengklonan perlu diautomatikasikan dengan kecerdasan untuk kes-kes khas (seperti objek yang mengandungi rujukan yang tidak berfungsi)