İçindekiler:
Tanım - Derin Kopya ne anlama geliyor?
C # 'da derin kopya, bir nesnenin bir kopyasının, hem örnek üyelerinin hem de referans üyeleri tarafından işaret edilen nesnelerin kopyalarını içerecek şekilde oluşturulduğu bir tekniği ifade eder.
Derin kopya, bir nesnenin, doğrudan başvurulan öğeleri (değer türünün) ve bir başvuru türünün dolaylı olarak başvurulan öğelerini içeren bir öğenin tüm öğelerini kopyalamayı amaçlamaktadır. verinin kendisi. Derin kopya, orijinal verilere başvurmadan yeni bir kopyanın (klon) oluşturulduğu senaryolarda kullanılır.
Techopedia Derin Kopyayı açıklıyor
Derin kopya, sığ kopyadan, nesnenin referans türü üyelerinin kopyalanma biçiminden farklıdır. Her iki durumda da değer türünün alan üyeleri kopyalanırken, alanın birer birer kopyası gerçekleştirilir. Referans tipi alanları kopyalarken, sığ kopya sadece referansın kopyalanmasını içerir, oysa derin kopyada atıfta bulunulan nesnenin yeni bir kopyası gerçekleştirilir.
Derin kopya bir örnekle, AddressInfo değerine sahip bir Employee nesnesini referans türünün bir üyesi olarak ve değer türünün diğer üyeleriyle birlikte düşünerek gösterilebilir. Employee'nin derin bir kopyası, Employee2 adlı yeni bir nesne oluşturur, Value türündeki üyeler Employee ile aynıdır, ancak yeni bir nesne olan AddressInfo2'nin kopyası olan AddressInfo2'ye başvurur.
Derin kopya aşağıdaki yöntemlerden herhangi biri kullanılarak uygulanabilir:
- Sınıfın kopya oluşturucusu, hem değer hem de başvuru (uygun bellek ayırma işleminden sonra) türündeki üyeleri kopyalamak için gerekli mantıkla uygulanabilir. Bu yöntem sıkıcı ve hataya açıktır.
- System.Object.MemberwiseClone yöntemi, değer türünün statik olmayan üyelerini kopyalamak için kullanılabilir. Referans türündeki nesnelerin kopyaları orijinal ile aynı değer kümesiyle oluşturulabilir ve atanabilir
- Derin kopyalanması gereken bir nesne, geri yüklenerek serileştirilebilir ve yeni bir nesneye serileştirilebilir. Bu yöntem otomatiktir ve nesne üyelerindeki değişiklikler için kod değişikliği gerektirmez, ancak diğer yöntemlerden daha yavaştır ve klonlanmış nesnenin serileştirilebilir olmasını gerektirir
- Yinelemeli yansıma, sığ bir kopya elde etmek için kullanılabilir; bu noktada derin kopya için gerekli ek kod eklenebilir. Bu yöntem otomatiktir ve nesnedeki alanların eklenmesi veya kaldırılması için kod değişikliği gerektirmez. Daha yavaştır ve kısmi güven ortamında izin verilmez
- Daha hızlı ancak daha az kod okunabilirliği ve zor bakım ile sonuçlanan ara dil kodu kullanılabilir
Derin kopya uygulamak için:
- Nesne iyi tanımlanmış olmalı ve keyfi olamaz
- Nesnenin özellikleri dikkate alınmayacak
- Klonlama özel durumlar için istihbarat ile otomatikleştirilmelidir (yönetilmeyen referanslar içeren nesneler gibi)
