Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Linee guida nella scrittura di codice #15: Clonazione

Pillole sulla buona scrittura del codice: la clonazione
Pillole sulla buona scrittura del codice: la clonazione
Link copiato negli appunti

Clonare un oggetto in .NET significa crearne una copia identica ma distinta.

Non esiste però un solo tipo di clonazione, bensì due: la shallow copy e la deep copy. Per copia shallow si intende una copia di un oggetto in cui viene clonato solo l'oggetto padre e non i figli mentre al contrario una deep copy è una clonazione del padre e di tutti i suoi figli. Per comprendere meglio questa differenza facciamo un semplice esempio.

Abbiamo un Array List di oggetti Ordine. Ogni oggetto Ordine contiene a sua volta un oggetto Cliente. Se effettuiamo una shallow copy dell'Array List otterremo una copia dell'Array List i cui elementi punteranno agli stessi oggetti del primo Array List, avremo ottenuto quindi una copia dell'Array List ma non dei suoi oggetti figli. Se invece dello stesso Array List effettuiamo una deep copy, otterremo una copia dell'Array List ed una copia di ciascun oggetto Ordine in esso contenuto nonché di ciascun oggetto Cliente in ciascun Ordine.

Se in una propria classe si intende fornire la funzionalità  di clonazione dell'oggetto è opportuno implementare l'interfaccia ICloneable e di conseguenza il metodo Clone della stessa. In questo caso decidere il tipo di clonazione da eseguire (se shallow o deep) ed in ogni caso ricordarsi sempre di specificarlo nella documentazione del metodo.

Nel caso si opti per la shallow copy è possibile semplificare l'operazione richiamando il metodo MemberwiseClone del proprio oggetto:

public class Ordine : ICloneable
{
   public object Clone()
   {
     return this.MemberwiseClone();
   }
}

Ti consigliamo anche