Дълбоко копиране

Автор: Lewis Jackson
Дата На Създаване: 8 Може 2021
Дата На Актуализиране: 25 Юни 2024
Anonim
Глубокое копирование в python
Видео: Глубокое копирование в python

Съдържание

Определение - Какво означава Deep Copy?

Дълбокото копие в C # се отнася до техника, чрез която се създава копие на обект, така че да съдържа копия както на членове на инстанцията, така и на обектите, посочени от референтните членове.

Дълбокото копие е предназначено за копиране на всички елементи на обект, които включват директно реферирани елементи (от тип стойност) и индиректно реферираните елементи от референтен тип, който съдържа препратка (показалец) към място в паметта, което съдържа данни, а не съдържа самите данни. Дълбокото копие се използва в сценарии, при които се създава ново копие (клонинг) без никакво позоваване на оригиналните данни.


Въведение в Microsoft Azure и Microsoft Cloud | В това ръководство ще научите за какво се занимава компютърните изчисления и как Microsoft Azure може да ви помогне да мигрирате и стартирате бизнеса си от облака.

Техопедия обяснява Deep Copy

Дълбокото копиране се различава от плиткото по начина, по който се копират членовете на референтния тип на обекта. Докато копирате полевите членове от тип стойност и в двата случая, се изпълнява битово-битово копие на полето. Когато копирате полета от референтен тип, плиткото копиране включва само копиране на референцията, докато при дълбоко копие се извършва ново копие на посочения обект.

Дълбокото копие може да се илюстрира с пример, като се разгледа обект на Employee, който има AddressInfo като член на референтен тип, заедно с други членове от тип стойност. Дълбокото копие на Employee създава нов обект, Employee2, с членове от тип стойност, равен на Employee, но препраща към нов обект, AddressInfo2, който е копие на AddressInfo.

Дълбокото копиране може да бъде реализирано с помощта на някой от следните методи:


  • Конструкторът за копиране на класа може да бъде реализиран с необходимата логика за копиране на членове както от стойностни, така и от референтни (след правилно разпределение на паметта) типове. Този метод е досаден и податлив на грешки.
  • Методът System.Object.MemberwiseClone може да се използва за копиране на нестатични членове от тип стойност.Копия на обекти от референтен тип могат да бъдат създадени и присвоени със същия набор от стойности като оригинала
  • Обект, който трябва да бъде копиран в дълбочина, може да бъде сериализиран и десериализиран в нов обект чрез възстановяването му. Този метод е автоматизиран и не изисква промени в кода за модификации в елементите на обекта, но е по-бавен от другите методи и изисква клонираният обект да бъде сериализируем
  • Отражението с рекурсия може да се използва за получаване на плитко копие, в който момент може да се добави допълнителният код, необходим за дълбоко копиране. Този метод е автоматизиран и не изисква промени в кода за добавяне или премахване на полета в обекта. Той е по-бавен и не е позволен в среда на частично доверие
  • Може да се използва междинен код на езика, което е по-бързо, но води до по-малка четимост на кода и трудна поддръжка

За да внедрите дълбоко копие:


  • Обектът трябва да е добре дефиниран и не може да бъде произволен
  • Свойствата на обекта няма да бъдат взети предвид
  • Клонирането трябва да бъде автоматизирано с интелигентност за специални случаи (като обекти, съдържащи неуправляеми справки)