Deep Copy

Autor: Lewis Jackson
Data Utworzenia: 8 Móc 2021
Data Aktualizacji: 25 Czerwiec 2024
Anonim
Shallow vs Deep Copy in Java
Wideo: Shallow vs Deep Copy in Java

Zawartość

Definicja - Co oznacza Deep Copy?

Głęboka kopia, w języku C #, odnosi się do techniki, dzięki której kopia obiektu jest tworzona w taki sposób, że zawiera kopie zarówno elementów instancji, jak i obiektów wskazywanych przez elementy referencyjne.

Głębokie kopiowanie ma na celu skopiowanie wszystkich elementów obiektu, które obejmują elementy z bezpośrednimi odniesieniami (typu wartości) i elementy z pośrednim odniesieniem typu odniesienia, które zawierają odniesienie (wskaźnik) do lokalizacji pamięci, która zawiera dane zamiast zawierać same dane. Głęboka kopia jest używana w scenariuszach, w których tworzona jest nowa kopia (klon) bez odniesienia do oryginalnych danych.


Wprowadzenie do Microsoft Azure i Microsoft Cloud | W tym przewodniku dowiesz się, na czym polega przetwarzanie w chmurze i jak Microsoft Azure może pomóc w migracji i prowadzeniu firmy z chmury.

Techopedia wyjaśnia Deep Copy

Głęboka kopia różni się od płytkiej kopii sposobem, w jaki kopiowane są elementy typu odniesienia obiektu. Podczas kopiowania elementów pola typu wartości w obu przypadkach wykonywana jest kopia pola krok po kroku. Podczas kopiowania pól typu referencyjnego, płytka kopia obejmuje kopiowanie tylko referencji, podczas gdy w głębokiej kopii wykonywana jest nowa kopia wskazanego obiektu.

Głęboką kopię można zilustrować na przykładzie, biorąc pod uwagę obiekt pracownika mający AddressInfo jako element typu odniesienia wraz z innymi elementami typu value. Głęboka kopia Pracownik tworzy nowy obiekt, Pracownik 2, z elementami typu wartości równymi Pracownikowi, ale odwołuje się do nowego obiektu, AddressInfo2, który jest kopią AddressInfo.

Głęboką kopię można wdrożyć przy użyciu dowolnej z następujących metod:


  • Konstruktor kopiujący klasy może zostać zaimplementowany z niezbędną logiką do kopiowania elementów zarówno wartości, jak i typów referencyjnych (po odpowiednim przydzieleniu pamięci). Ta metoda jest nużąca i podatna na błędy.
  • Można użyć metody System.Object.MemberwiseClone do skopiowania niestatycznych elementów typu wartość.Kopie obiektów typu odniesienia mogą być tworzone i przypisywane z tym samym zestawem wartości, co oryginał
  • Obiekt, który musi zostać głęboko skopiowany, może zostać zserializowany i zserializowany do nowego obiektu poprzez przywrócenie go. Ta metoda jest zautomatyzowana i nie wymaga zmian kodu w celu modyfikacji elementów obiektu, ale jest wolniejsza niż inne metody i wymaga, aby klonowany obiekt był możliwy do serializacji
  • Odbicie z rekurencją może być wykorzystane do uzyskania płytkiej kopii, w którym to momencie można dodać dodatkowy kod niezbędny do głębokiej kopii. Ta metoda jest zautomatyzowana i nie wymaga zmian kodu w celu dodania lub usunięcia pól w obiekcie. Jest wolniejszy i niedozwolony w środowisku częściowego zaufania
  • Można użyć kodu języka pośredniego, który jest szybszy, ale powoduje mniejszą czytelność kodu i trudną konserwację

Aby wdrożyć głęboką kopię:


  • Obiekt musi być dobrze zdefiniowany i nie może być dowolny
  • Właściwości obiektu nie będą brane pod uwagę
  • Klonowanie musi być zautomatyzowane za pomocą inteligencji w szczególnych przypadkach (takich jak obiekty zawierające niezarządzane odniesienia)