Deep Copy

Autore: Lewis Jackson
Data Della Creazione: 8 Maggio 2021
Data Di Aggiornamento: 25 Giugno 2024
Anonim
Shallow vs Deep Copy in Java
Video: Shallow vs Deep Copy in Java

Contenuto

Definizione - Cosa significa Deep Copy?

Deep copy, in C #, si riferisce a una tecnica mediante la quale viene creata una copia di un oggetto in modo tale che contenga copie di entrambi i membri dell'istanza e degli oggetti a cui fanno riferimento i membri di riferimento.

Deep copia ha lo scopo di copiare tutti gli elementi di un oggetto, che includono elementi a riferimento diretto (di tipo valore) e gli elementi a riferimento indiretto di un tipo di riferimento che contiene un riferimento (puntatore) in una posizione di memoria che contiene dati anziché contenere dati stessi. La copia profonda viene utilizzata negli scenari in cui viene creata una nuova copia (clone) senza alcun riferimento ai dati originali.


Un'introduzione a Microsoft Azure e Microsoft Cloud | In questa guida imparerai cos'è il cloud computing e in che modo Microsoft Azure può aiutarti a migrare e gestire la tua azienda dal cloud.

Techopedia spiega Deep Copy

La copia profonda differisce dalla copia ridotta nel modo in cui vengono copiati i membri del tipo di riferimento dell'oggetto. Durante la copia dei membri del campo di tipo valore in entrambi i casi, viene eseguita una copia del campo bit per bit. Quando si copiano campi di tipo di riferimento, la copia superficiale comporta la copia solo del riferimento, mentre nella copia profonda viene eseguita una nuova copia dell'oggetto indicato.

La copia profonda può essere illustrata con un esempio considerando un oggetto Employee con AddressInfo come membro del tipo di riferimento insieme ad altri membri del tipo di valore. Una copia profonda di Employee crea un nuovo oggetto, Employee2, con membri di tipo valore pari a Employee ma fa riferimento a un nuovo oggetto, AddressInfo2, che è una copia di AddressInfo.

La copia profonda può essere implementata utilizzando uno dei seguenti metodi:


  • Il costruttore della copia della classe può essere implementato con la logica necessaria per copiare i membri di entrambi i tipi di valore e di riferimento (dopo un'allocazione della memoria corretta). Questo metodo è noioso e soggetto a errori.
  • Il metodo System.Object.MemberwiseClone può essere utilizzato per copiare i membri non statici di tipo valore.Copie di oggetti di tipo di riferimento possono essere create e assegnate con lo stesso set di valori dell'originale
  • Un oggetto che deve essere copiato in profondità può essere serializzato e deserializzato in un nuovo oggetto ripristinandolo. Questo metodo è automatizzato e non richiede modifiche al codice per le modifiche nei membri dell'oggetto, ma è più lento di altri metodi e richiede che l'oggetto clonato sia serializzabile
  • La riflessione con ricorsione può essere utilizzata per ottenere una copia superficiale, a quel punto è possibile aggiungere il codice aggiuntivo necessario per la copia profonda. Questo metodo è automatizzato e non richiede modifiche al codice per qualsiasi aggiunta o rimozione di campi nell'oggetto. È più lento e non consentito in un ambiente di attendibilità parziale
  • È possibile utilizzare un codice lingua intermedio, che è più veloce ma comporta una minore leggibilità del codice e una manutenzione difficile

Per implementare la copia profonda:


  • L'oggetto deve essere ben definito e non può essere arbitrario
  • Le proprietà dell'oggetto non saranno prese in considerazione
  • La clonazione deve essere automatizzata con intelligenza per casi speciali (come oggetti contenenti riferimenti non gestiti)