Boxing e unboxing consentono di gestire i tipi di valore come oggetti. Il boxing di un tipo di valore consente di assemblarlo all'interno di un'istanza del tipo di riferimento Object e quindi di archiviarlo nell'heap sottoposto a Garbage Collection. L'unboxing consente invece di estrarre il tipo di valore dall'oggetto. In questo esempio viene eseguito il boxing della variabile integer i assegnandola all'oggetto o.
int i = 123; object o = (object)i; // boxing
È quindi possibile eseguire l'unboxing dell'oggetto o assegnandolo alla variabile integer i:
o = 123; i = (int)o; // unboxing
Prestazioni
Rispetto alle semplici assegnazioni, il boxing e l'unboxing sono processi onerosi dal punto di vista del calcolo. Il boxing di un tipo di valore comporta infatti l'allocazione e la costruzione di un oggetto completamente nuovo. A un livello inferiore, anche il cast richiesto per l'unboxing è oneroso dal punto di vista del calcolo. Per ulteriori informazioni, vedere Prestazioni.
Sezioni correlate
Ulteriori informazioni:
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere la seguente sezione inclusa in Specifiche del linguaggio C#:
-
4.3 Boxing e unboxing
Vedere anche
Le operazioni di Boxing ed Unboxing, sebbene comode in alcuni contesti, sono operazioni abbastanza dispendiose per il .NET Framework ed andrebbero evitate. Un uso eccessivo di queste operazioni potrebbe infatti penalizzare notevolmente le prestazioni delle nostre applicazioni.
Uno dei casi in cui maggiormente si esegue questa operazione è nell'utilizzo delle collection. Se prendiamo ad esempio la collection ArrayList (vedi http://msdn2.microsoft.com/it-it/library/system.collections.arraylist(vs.80).aspx ), il tipo accettato in ingresso è Object. Ne consegue che, ogni volta che ne inseriremo un valore, verrà eseguita una operazione di Boxing. Viceversa, quando andremo a lavorare sugli elementi della collection, dovremo eseguire l'operazione di Unboxing.
Se stiamo lavorando con il .NET Framework 2.0, possiamo avvalerci delle potenzialità offerte dai Generics (vedi http://msdn2.microsoft.com/it-it/library/512aeb7t(vs.80).aspx ) per ridurre al minimo questo tipo di operazioni.