Copiere profundă

Autor: Lewis Jackson
Data Creației: 8 Mai 2021
Data Actualizării: 25 Iunie 2024
Anonim
Lecture 23 Deep Copy and Shallow Copy in C++ Hindi
Video: Lecture 23 Deep Copy and Shallow Copy in C++ Hindi

Conţinut

Definiție - Ce înseamnă Deep Copy?

Copia profundă, în C #, se referă la o tehnică prin care o copie a unui obiect este creată astfel încât să conțină copii ale ambelor membri ale instanței și ale obiectelor indicate de membrii de referință.

Copierea în profunzime este destinată să copieze toate elementele unui obiect, care includ elemente direct referite (de tip valoric) și elementele indirecte de referință ale unui tip de referință care deține o referință (pointer) la o locație de memorie care conține date și nu conține date datele în sine. Copia profundă este folosită în scenariile în care o copie nouă (clonă) este creată fără nicio referire la datele originale.


O introducere în Microsoft Azure și Microsoft Cloud | În acest ghid, veți afla despre ce este vorba despre cloud computing și despre cum Microsoft Azure vă poate ajuta să migrați și să conduceți afacerea din cloud.

Techopedia explică copiere profundă

Copia profundă diferă de o copie superficială în modul în care sunt copiate membrii tipului de referință al obiectului. În timp ce copiați membrii câmpului de tipul valorii în ambele cazuri, se efectuează o copie pe câmp a câmpului. Atunci când se copiază câmpuri de tip de referință, o copie superficială implică copierea doar a referinței, în timp ce în copie profundă se efectuează o nouă copie a obiectului referit.

O copie profundă poate fi ilustrată cu un exemplu, luând în considerare un obiect Angajat care are AddressInfo ca membru al tipului de referință împreună cu alți membri de tip valoric. O copie profundă a Angajatului creează un nou obiect, Employee2, cu membri de tipul valorii egale cu Angajat, dar se referă la un obiect nou, AddressInfo2, care este o copie a AddressInfo.

Copia profundă poate fi implementată utilizând oricare dintre următoarele metode:


  • Constructorul de copie al clasei poate fi implementat cu logica necesară pentru copierea membrilor atât de tipuri de valoare, cât și de referință (după alocarea corectă a memoriei). Această metodă este obositoare și predispusă la erori.
  • Metoda System.Object.MemberwiseClone poate fi utilizată pentru a copia membrii nestatici de tip valoric.Copii ale obiectelor de tip de referință pot fi create și atribuite cu același set de valori ca și originalul
  • Un obiect care trebuie copiat în profunzime poate fi serializat și de-serializat într-un obiect nou, prin restaurarea acestuia. Această metodă este automatizată și nu necesită modificări de cod pentru modificări în membrii obiectului, dar este mai lentă decât alte metode și necesită ca obiectul clonat să fie serializabil
  • Reflecția cu recurs poate fi folosită pentru a obține o copie superficială, moment în care se poate adăuga codul suplimentar necesar pentru o copie profundă. Această metodă este automatizată și nu necesită modificări de cod pentru adăugarea sau eliminarea câmpurilor din obiect. Este mai lent și nu este permis în mediul de încredere parțial
  • Se poate utiliza codul limbii intermediare, care este mai rapid, dar duce la o mai mică lizibilitate a codului și întreținere dificilă

Pentru a implementa o copie profundă:


  • Obiectul trebuie să fie bine definit și nu poate fi arbitrar
  • Proprietățile obiectului nu vor fi luate în considerare
  • Clonarea trebuie automatizată cu inteligență pentru cazuri speciale (cum ar fi obiectele care conțin referințe neadministrate)