W poprzednim wpisie wymieniłem typy wbudowane w platformę .Net. Mamy do dyspozycji typy referencyjne i wartościowe. Typy referencyjne dodawane są na stertę. A typy wartościowe na stos. Stos i sterta to część pamięci wirtualnej, która jest przydzielona programowi, podczas jego uruchomienia, przez system operacyjny. Zarządzanie zasobami sterty i stosu jest automatyczne.

Typy wartościowe niejawnie dziedziczą po klasie System.ValueType. Podczas deklaracji zmiennej o typie wartościowym kompilator rezerwuje wystarczającą ilość miejsca w pamięci. Po wykonaniu przez program bloku kodu, w którym zadeklarowana była nasza zmienna dane z pamięci zostają automatycznie usunięte. Zmienne o typie wartościowym dodawane są do stosu lub sterty w zależności od kontekstu. Nadanie wartości odbywa się za pomocą operatora =

Typy referencyjne to elementy, które rozszerzają klasę System.Object lub System.String. Podczas deklaracji zmiennej o typie referencyjnym kompilator zapisuje zmienne typu wartościowego na stercie. Następnie dodawana jest zmienna na stos, która przechowuje referencje, czyli adres pamięci do zmiennych zapisanych na stercie. Garbage Collector usuwa te zmienne ze sterty, do których nie prowadzą już żadne referencje. Proces ten odbywa się cyklicznie. Gdy użyjemy operatora = dla zmiennej o typie referencyjnym skopiowany zostanie adres do pamięci na stercie a nie wartość zmiennej. Jest to istotna różnica między typem referencyjnym a wartościowym.