Глибока копія

Автор: Lewis Jackson
Дата Створення: 8 Травень 2021
Дата Оновлення: 25 Червень 2024
Anonim
О копировании объектов в JavaScript, глубокое и поверхностное копирование
Відеоролик: О копировании объектов в JavaScript, глубокое и поверхностное копирование

Зміст

Визначення - Що означає глибока копія?

Глибока копія в C # відноситься до техніки, за допомогою якої створюється копія об'єкта таким чином, що вона містить копії як членів екземпляра, так і об'єктів, на які вказують референсні члени.

Глибока копія призначена для копіювання всіх елементів об'єкта, які включають безпосередньо посилання на елементи (типу значення) та опосередковано посилаються елементи еталонного типу, що містить посилання (покажчик) на місце пам'яті, яке містить дані, а не містить самі дані. Глибока копія використовується в сценаріях, коли створюється нова копія (клон) без будь-яких посилань на вихідні дані.


Вступ до Microsoft Azure та Microsoft Cloud | У цьому посібнику ви дізнаєтеся, що стосується хмарних обчислень та як Microsoft Azure може допомогти вам мігрувати та вести свій бізнес із хмари.

Техопедія пояснює глибоку копію

Глибока копія відрізняється від дрібної копії тим, як копіюються елементи опорного типу об'єкта. Під час копіювання членів поля типу типу в обох випадках виконується побітна копія поля. При копіюванні полів довідкового типу неглибока копія передбачає копіювання лише посилання, тоді як у глибокій копії виконується нова копія згаданого об'єкта.

Глибока копія може бути проілюстрована прикладом, розглядаючи об'єкт Співробітник, який має AddressInfo як члена опорного типу, а також інших членів типу значення. Глибока копія Employee створює новий об'єкт, Employee2, з членами типу значення, рівним службовцю, але посилається на новий об'єкт AddressInfo2, який є копією AddressInfo.

Глибока копія може бути реалізована за допомогою будь-якого з наступних методів:


  • Конструктор копій класу може бути реалізований з необхідною логікою для копіювання членів як значущих, так і посилальних (після правильного розподілу пам'яті) типів. Цей метод є виснажливим і схильним до помилок.
  • Метод System.Object.MemberwiseClone може використовуватися для копіювання нестатичних членів типу значень.Копії об'єктів еталонного типу можна створювати та призначати тим самим набором значень, що й оригінал
  • Об'єкт, який повинен бути глибоко скопійований, може бути серіалізований та десеризований у новий об’єкт шляхом відновлення. Цей метод є автоматизованим і не вимагає змін коду для модифікації членів об'єкта, але повільніше, ніж інші методи, і вимагає серійного доступу до клонованого об'єкта
  • Рефлексія з рекурсією може бути використана для отримання дрібної копії, після чого може бути доданий додатковий код, необхідний для глибокої копії. Цей метод автоматизований і не вимагає змін коду для будь-якого додавання або видалення полів в об’єкті. Це повільніше і не допускається в умовах часткової довіри
  • Можна використовувати проміжний код мови, який є швидшим, але призводить до меншої читабельності коду та складного обслуговування

Для реалізації глибокої копії:


  • Об'єкт повинен бути чітко визначеним і не може бути довільним
  • Властивості об'єкта не будуть враховані
  • Для особливих випадків клонування має бути автоматизовано розвідкою (як об'єкти, що містять керовані посилання)