2016-05-27 47 views
5

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

4

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.

3

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.

i regarding unbox:

[...] 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.