Un'altra domanda di intervista in C# recente è stata se sapessi cosa sono Boxing e Unboxing. Ho spiegato che i tipi di valore sono su Stack e tipi di riferimento su Heap. Quando un valore viene lanciato su un tipo di riferimento, lo chiamiamo boxing e viceversa.Boxing vs Unboxing
Poi mi ha chiesto di calcolare questo:
int i = 20;
object j = i;
j = 50;
Che cosa è i
?
ho messo in su e disse: 50, in cui la sua realtà 20. Ora penso capire il motivo per cui, tuttavia quando stavo giocando con diverse combinazioni sono rimasto sorpreso di vedere questo:
Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing
mi aspettavo di vedi anche b == 2
, ma non lo è, perché? È perché il secondo boxing distrugge e sostituisce l'intero oggetto a
sull'heap?
Perché se faccio questo, va bene:
public class TT
{
public int x;
}
TT t = new TT();
t.x = 1;
TT t2 = new TT();
t2.x = 2;
t = t2;
t.x = 3;
Che cosa è t2.x
? Dovrebbe essere 3, e lo è. Ma questo non è affatto un esempio di boxing/unboxing, è corretto? Quindi, come lo riassumeresti?
I valori possono essere sempre gli stessi in una conversione di boxe/unboxing come sopra?
vedi anche http://stackoverflow.com/questions/13055/what-is-boxing-and-unboxing-and-what-are-the -Trade-off per una lettura generale – nawfal