Djup kopia

Författare: Lewis Jackson
Skapelsedatum: 8 Maj 2021
Uppdatera Datum: 25 Juni 2024
Anonim
Kopia av Paulsson och djup
Video: Kopia av Paulsson och djup

Innehåll

Definition - Vad betyder Deep Copy?

Djup kopia, i C #, avser en teknik genom vilken en kopia av ett objekt skapas så att den innehåller kopior av både instansmedlemmar och de objekt som referensmedlemmarna pekar på.

Djupkopia är avsedd att kopiera alla element i ett objekt, som inkluderar direkt refererade element (av värdetyp) och de indirekt refererade elementen av en referenstyp som har en referens (pekaren) till en minnesplats som innehåller data snarare än som innehåller själva uppgifterna. Djup kopia används i scenarier där en ny kopia (klon) skapas utan någon hänvisning till originaldata.


En introduktion till Microsoft Azure och Microsoft Cloud | I hela denna guide kommer du att lära dig vad cloud computing handlar om och hur Microsoft Azure kan hjälpa dig att migrera och driva ditt företag från molnet.

Techopedia förklarar Deep Copy

Djup kopia skiljer sig från grunt kopia på det sätt som referenstypmedlemmarna på objektet kopieras. Vid kopiering av fältmedlemmarna av värdetyp i båda fallen utförs en bit-för-bit-kopia av fältet. Vid kopiering av fält av referenstyp innebär grund kopiering endast att kopiera referensen, medan i djup kopia utförs en ny kopia av det refererade objektet.

Djup kopia kan illustreras med ett exempel genom att betrakta ett anställdsobjekt som har AddressInfo som medlem av referenstyp tillsammans med andra medlemmar av värdetyp. En djup kopia av anställd skapar ett nytt objekt, Employee2, med medlemmar av värdetyp som är lika med Employee men refererar till ett nytt objekt, AddressInfo2, som är en kopia av AddressInfo.

Djup kopia kan implementeras med någon av följande metoder:


  • Kopieringskonstruktör för klassen kan implementeras med den nödvändiga logiken för att kopiera medlemmar av både värde och referens (efter korrekt minnesallokering). Denna metod är tråkig och felaktig.
  • System.Object.MemberwiseClone-metoden kan användas för att kopiera de icke-statiska medlemmarna av värdetyp.Kopior av objekt av referenstyp kan skapas och tilldelas med samma uppsättning värden som originalet
  • Ett objekt som måste kopieras djupt kan serialiseras och de-serialiseras till ett nytt objekt genom att återställa det. Den här metoden är automatiserad och kräver inte kodändringar för modifieringar i objektmedlemmar men är långsammare än andra metoder och kräver att det klonade objektet kan serialiseras
  • Reflektion med rekursion kan användas för att få en ytlig kopia, vid vilken punkt den ytterligare kod som krävs för djup kopia kan läggas till. Den här metoden är automatiserad och kräver inte kodändringar för tillägg eller borttagning av fält i objektet. Det är långsammare och inte tillåtet i delvis förtroendemiljö
  • Mellanspråkkod kan användas, vilket är snabbare men resulterar i mindre kodläsbarhet och svårt underhåll

Så här implementerar du djup kopia:


  • Objektet måste vara väl definierat och inte vara godtyckligt
  • Objektets egenskaper kommer inte att beaktas
  • Kloning måste automatiseras med intelligens för speciella fall (som föremål som innehåller icke-hanterade referenser)