Datové typy takové typy, u kterých proměnná neobsahuje samotná data, ale pouze odkaz (referenci) na místo v paměti, kde jsou data uložena – obvykle na haldě (heap).
Při přiřazení jedné referenční proměnné do druhé, se nepřekopíruje se celý objekt, ale obě proměnné budou obsahovat odkaz na stejný objekt v paměti. Pokud dojde k úpravě jedné z nich, změna se automaticky projevují v obou, protože se jedná pořád o stejný objekt.
Halda (Heap)
Neorganizovaná oblast paměti, která se používá pro dynamickou alokaci objektů za běhu programu.
Na rozdíl od zásobníku je její správa pomalejší, ale umožňuje uchovávat větší data s delší životností
Čištění objektů na haldě je zajišťováno Garbage Collectorem (Správa paměti)
K datům uloženým na haldě se přistupuje pomocí referencí
Příklady referenčních datových typů
Objekt (object)
Základní datový typ, který je využívaný v objektově orientovaných jazycích
Jakýkoliv typ lze pomocí explicitní konverze převést na objekt. Konverzí ale dojde ke ztrátě přímé informace o datovém typu.
Objekt je zároveň možné zkonvertovat na libovolný datový typ. Tato konverze nemusí uspět v případě, že data uložená v objektu není možné zkonvertovat.
int x = 7;object myObject = x; // implicitní konverzeint number = (int) myObject; // explicitní konverze z objektu na int
V některých případech je potřebné uložit data ve více dimenzích (např. při ukládání tabulky nebo matice). Pro to, je nutné při deklaraci datového typu do hranatých závorek umístit čárku. Počet čárek je roven počtu dimenzí −1, tedy pro uložení tabulky bude datový typ vypadat: int[,] table;, pro 3D: int[,,] cube; atd.
Takto vytvořené pole má vždy úplnou velikost – pokud je rozměr 3×2, tak se alokuje velikost 3×2
Pole, které umožňuje, že každý řádek má jinou délku. Toto řešení dokáže ušetřit paměť, protože není nutné alokovat paměť, která se nevyužije. Nicméně se používá velmi zdřídka.
public static int[][] JaggedPole = new int[][]{ new int[] { 1, 2 }, new int[] { 3, 4, 5 }};
Třída
Umožňuje seskupit data a funkcionalitu na jedno místo.
Jedná se o heterogenní datový typ, tedy je možné do něj uložit různé datové typy.