Diepe kopie

Schrijver: Lewis Jackson
Datum Van Creatie: 8 Kunnen 2021
Updatedatum: 25 Juni- 2024
Anonim
Say goodbye to insomnia with heavy rain and terrifying thunder that cover the village at night
Video: Say goodbye to insomnia with heavy rain and terrifying thunder that cover the village at night

Inhoud

Definitie - Wat betekent Deep Copy?

Diepe kopie, in C #, verwijst naar een techniek waarmee een kopie van een object wordt gemaakt zodat deze kopieën bevat van zowel instantieleden als de objecten waarnaar wordt verwezen door referentieleden.

Diepe kopie is bedoeld om alle elementen van een object te kopiëren, inclusief elementen waarnaar direct wordt verwezen (van het waardetype) en de elementen waarnaar indirect wordt verwezen van een referentietype dat een referentie (aanwijzer) bevat naar een geheugenlocatie die gegevens bevat in plaats van de gegevens zelf. Diepe kopie wordt gebruikt in scenario's waarin een nieuwe kopie (kloon) wordt gemaakt zonder enige verwijzing naar originele gegevens.


Een inleiding tot Microsoft Azure en de Microsoft Cloud | In deze handleiding leert u wat cloud computing inhoudt en hoe Microsoft Azure u kan helpen bij het migreren en runnen van uw bedrijf vanuit de cloud.

Techopedia legt Deep Copy uit

Diepe kopie verschilt van ondiepe kopie in de manier waarop de leden van het referentietype van het object worden gekopieerd. Terwijl in beide gevallen de veldleden van het waardetype worden gekopieerd, wordt een bit-voor-bit kopie van het veld uitgevoerd. Bij het kopiëren van velden van referentietype, omvat ondiepe kopie alleen het kopiëren van de referentie, terwijl in diepe kopie een nieuwe kopie van het verwezen object wordt uitgevoerd.

Diepe kopie kan worden geïllustreerd met een voorbeeld door een werknemerobject met AddressInfo als lid van referentietype te beschouwen, samen met andere leden van waardetype. Een diepe kopie van Werknemer maakt een nieuw object, Werknemer2, met leden van het waardetype gelijk aan Werknemer, maar verwijst naar een nieuw object, AddressInfo2, een kopie van AddressInfo.

Deep copy kan worden geïmplementeerd met behulp van een van de volgende methoden:


  • Kopieerconstructor van de klasse kan worden geïmplementeerd met de nodige logica voor het kopiëren van leden van zowel waarde- als referentietypes (na juiste geheugentoewijzing). Deze methode is vervelend en foutgevoelig.
  • De methode System.Object.MemberwiseClone kan worden gebruikt om de niet-statische leden van het waardetype te kopiëren.Kopieën van objecten van het referentietype kunnen worden gemaakt en toegewezen met dezelfde set waarden als het origineel
  • Een object dat diep moet worden gekopieerd, kan worden geserialiseerd en gedeserialiseerd in een nieuw object door het te herstellen. Deze methode is geautomatiseerd en vereist geen codewijzigingen voor wijzigingen in objectleden, maar is langzamer dan andere methoden en vereist dat het gekloonde object serienummerbaar is
  • Reflectie met recursie kan worden gebruikt om een ​​ondiepe kopie te krijgen, op welk punt de extra code die nodig is voor een diepe kopie kan worden toegevoegd. Deze methode is geautomatiseerd en vereist geen codewijzigingen voor het toevoegen of verwijderen van velden in het object. Het is langzamer en niet toegestaan ​​in een gedeeltelijke vertrouwensomgeving
  • Tussentijdse taalcode kan worden gebruikt, wat sneller is, maar resulteert in minder leesbaarheid van de code en moeilijk onderhoud

Deep copy implementeren:


  • Het object moet goed gedefinieerd zijn en mag niet willekeurig zijn
  • Eigenschappen van object worden niet in overweging genomen
  • Het klonen moet worden geautomatiseerd met intelligentie voor speciale gevallen (zoals objecten met onbeheerde referenties)