Dom Rozwój Co to jest kopia głęboka? - definicja z techopedia

Co to jest kopia głęboka? - definicja z techopedia

Spisu treści:

Anonim

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.

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)
Co to jest kopia głęboka? - definicja z techopedia