Dom Razvoj Što je duboka kopija? - definicija iz tehopedije

Što je duboka kopija? - definicija iz tehopedije

Sadržaj:

Anonim

Definicija - Što znači duboka kopija?

Duboka kopija u C # odnosi se na tehniku ​​kojom se stvara kopija objekta tako da sadrži kopije i članova instance i objekata na koje upućuju referentni članovi.


Dubinska kopija namijenjena je kopiranju svih elemenata objekta, koji uključuju izravno referencirane elemente (vrijednosnog tipa) i neizravno upućene elemente referentnog tipa koji sadrže referencu (pointer) na memorijsko mjesto koje sadrži podatke, a ne sadrži sami podaci. Duboka kopija koristi se u scenarijima u kojima se stvara nova kopija (klon) bez ikakvog pozivanja na izvorne podatke.

Tehopedia objašnjava duboku kopiju

Duboka kopija razlikuje se od plitke kopije u načinu kopiranja članova referentne vrste. Dok se u oba slučaja kopiraju polja polja vrijednosti vrijednosti, izvodi se malo-bitna kopija polja. Kod kopiranja referentnih polja, plitka kopija uključuje kopiranje samo reference, dok se u dubokoj kopiji izvodi nova kopija navedenog objekta.


Duboka kopija može se ilustrirati primjerom uzimajući u obzir objekt zaposlenika koji ima AddressInfo kao referentni član zajedno s ostalim članovima vrste vrijednosti. Dubina kopija Employee stvara novi objekt, Employee2, s članovima vrste vrijednosti jednake Employee, ali upućuje na novi objekt AddressInfo2, koji je kopija AddressInfo.


Dubinska kopija može se implementirati pomoću bilo koje od sljedećih metoda:

  • Konstruktor konstrukcije klase može se implementirati s potrebnom logikom za kopiranje članova obje vrijednosti i vrijednosti (nakon pravilne dodjele memorije). Ova metoda je zamorna i sklona pogreškama.
  • System.Object.MemberwiseClone metoda može se koristiti za kopiranje nestalnih članova tipa vrijednosti. Kopije objekata referentnog tipa mogu se kreirati i dodijeliti s istim nizom vrijednosti kao u izvorniku
  • Objekt koji se mora duboko kopirati može se serializirati i deserializirati u novi objekt vraćanjem. Ova metoda je automatizirana i ne zahtijeva promjene koda za modifikacije u objektima članova, ali je sporija od drugih metoda i zahtijeva klonirani objekt da se može serijski ispitati
  • Razmišljanje s rekurzijom može se upotrijebiti za dobivanje plitke kopije, na kojoj se može dodati dodatni kod potreban za duboku kopiju. Ova metoda je automatizirana i ne zahtijeva promjene koda za bilo kakvo dodavanje ili uklanjanje polja u objektu. To je sporije i nije dopušteno u okruženju s djelomičnim povjerenjem
  • Može se upotrijebiti srednji jezični kod, što je brže, ali rezultira manjom čitljivošću koda i otežanim održavanjem

Da biste implementirali duboku kopiju:

  • Objekt mora biti dobro definiran i ne može biti proizvoljan
  • Svojstva objekta neće se razmatrati
  • Kloniranje se mora automatizirati inteligencijom za posebne slučajeve (poput objekata koji sadrže neupravljane reference)
Što je duboka kopija? - definicija iz tehopedije