Kiedy następuje rozpakowywanie, istnieje kopia wartości pola do odpowiedniego typu zmiennej, ale co dzieje się w miejscu pamięci kopii pudełkowej na stercie. Czy kopia pudełkowa pozostaje w tym miejscu i pokrywa pamięć na stercie?Mechanizm Unboxingu
Odpowiedz
Czy kopia pudełkowa pozostaje w tym miejscu i pokrywa pamięć na stercie?
Tak. Po tym wszystkim, nie może być inne odniesienia do niego:
object o1 = 5;
object o2 = o1;
int x = (int) o1;
x = 10;
Console.WriteLine(o2); // Still 5
wartości Pudełkowane działać jak normalne obiekty, w zakresie możliwości zakwalifikowania do zbierania śmieci, gdy nie ma już silne odniesienia do nich.
Tak, oczywiście, podczas rozpakowywania oryginały pozostają nienaruszone.
W dół na poziomie IL dostępne są dwa kody do rozpakowywania: unbox.any
i unbox
.
Według MSDN regarding unbox.any
:
Po nałożeniu na pudełkowej postaci typu wartości, unbox.any instrukcja wyodrębnia wartość zawartą w obj (typu O), a zatem odpowiednik unbox, po którym następuje ldobj.
[...] unbox nie jest wymagane, aby skopiować typ wartości z obiektu. Zazwyczaj po prostu oblicza adres typu wartości, który jest już obecny wewnątrz obiektu pudełkowego .
Kopia pierwotnej wartości może, ale nie musi, ale pierwotna wartość pozostaje nienaruszona.