Daftar Isi:
Definisi - Apa artinya Deep Copy?
Salinan dalam, dalam C #, mengacu pada teknik dimana salinan suatu objek dibuat sedemikian rupa sehingga berisi salinan dari kedua anggota instance dan objek yang ditunjuk oleh anggota referensi.
Salinan dalam dimaksudkan untuk menyalin semua elemen dari suatu objek, yang meliputi elemen yang dirujuk langsung (dari tipe nilai) dan elemen yang dirujuk secara tidak langsung dari tipe referensi yang menyimpan referensi (penunjuk) ke lokasi memori yang berisi data daripada berisi data itu sendiri. Salinan dalam digunakan dalam skenario di mana salinan baru (klon) dibuat tanpa referensi ke data asli.
Techopedia menjelaskan Deep Copy
Salinan dalam berbeda dari salinan dangkal dengan cara di mana anggota tipe referensi objek disalin. Saat menyalin anggota bidang tipe nilai dalam kedua kasus, salinan bidang sedikit demi sedikit dilakukan. Saat menyalin bidang tipe referensi, salinan dangkal hanya melibatkan menyalin referensi, sedangkan dalam salinan yang dalam, salinan baru dari objek yang dirujuk dilakukan.
Salinan yang dalam dapat diilustrasikan dengan contoh dengan mempertimbangkan objek Karyawan yang memiliki AddressInfo sebagai anggota tipe referensi bersama dengan anggota lain dari tipe nilai. Salinan yang mendalam dari Karyawan menciptakan objek baru, Employee2, dengan anggota tipe nilai sama dengan Karyawan tetapi referensi objek baru, AddressInfo2, yang merupakan salinan AddressInfo.
Salinan dalam dapat diimplementasikan menggunakan salah satu metode berikut:
- Salin konstruktor kelas dapat diimplementasikan dengan logika yang diperlukan untuk menyalin anggota baik nilai dan referensi (setelah alokasi memori yang tepat). Metode ini membosankan dan rentan kesalahan.
- Metode System.Object.MemberwiseClone dapat digunakan untuk menyalin anggota tipe nilai yang tidak statis. Salinan objek tipe referensi dapat dibuat dan ditugaskan dengan set nilai yang sama seperti aslinya
- Objek yang harus disalin dalam dapat diserialisasi dan diderialisasi menjadi objek baru dengan mengembalikannya. Metode ini otomatis dan tidak memerlukan perubahan kode untuk modifikasi anggota objek tetapi lebih lambat dari metode lain dan mengharuskan objek yang dikloning menjadi serializable
- Refleksi dengan rekursi dapat digunakan untuk mendapatkan salinan yang dangkal, pada titik mana kode tambahan yang diperlukan untuk salinan dalam dapat ditambahkan. Metode ini otomatis dan tidak memerlukan perubahan kode untuk penambahan atau penghapusan bidang dalam objek. Itu lebih lambat dan tidak diizinkan di lingkungan kepercayaan parsial
- Kode bahasa antara dapat digunakan, yang lebih cepat tetapi menghasilkan keterbacaan kode yang lebih rendah dan pemeliharaan yang sulit
Untuk menerapkan salinan dalam:
- Objek harus didefinisikan dengan baik dan tidak bisa sembarangan
- Properti objek tidak akan dipertimbangkan
- Kloning harus otomatis dengan intelijen untuk kasus-kasus khusus (seperti objek yang berisi referensi yang tidak dikelola)
