Hodnotové typy
1. Rozdělení datových typů
Jak jsme si již v minulosti říkali, jazyk C# má několik vestavěných datový typů:
-
Hodnotové typy - obsahují skupiny tzv. primitivních (atomické) datových typů (anglicky „Primitive Data Types“ nebo též označované jako „Simple Types“) vyjadřující čísla – celá a reálná i s vysokou přesností, znaky (např. $), logické hodnoty. Dále tato skupina obsahuje výčtové typy (nyní berme tento typ jako typ, jehož položky si může nadefinovat uživatel, např. dny v týdnu, skládající se z pondělí až neděle; struktury a tzv. nulovatelný typ, který představuje prázdnou hodnotu (null) - viz Obrázek 1

Obrázek 1: Rozdělení hodnotových datových typů
-
Referenční typy (reference, odkazy) – odkazy na instance tříd (objekty které zdědily vlastnosti a metody třídy, kterou můžeme považovat za jejich vzor), pole (jde v podstatě o seznam prvků stejného datového typu), atd. - viz Obrázek 2

Obrázek 2: Rozdělení referenčních datových typů
-
Ukazatele – uvádíme jen pro úplnost, protože leží mimo směr programování v C# – lze je používat v nezabezpečeném kódu (anglicky „Unsafe Code“) [3]
Ilustrativní příklad HodnotovyReferencniTyp
Program HodnotovyReferencniTyp
-
Popis: Příklad hodnotového a referenčního typu - deklarace proměnné datového typu int a proměnné datového typu string včetně jejich inicializace
-
Zadání: Deklarujte v hlavní metodě Main celočíselnou proměnou pocet (datový typ int) a inicializujte ji hodnotou 8. Dále deklarujte proměnnou text (datový typ string) jež bude obsahovat textové řetězec "Ahoj světe"
-
Řešení: Bude postupně probráno v následujícím textu
Na příkladu si ukažme, jaký je rozdíl mezi hodnotovým typem uloženým přímo v paměti a referenčním typem. Deklarujme si dvě proměnné: první bude mít název pocet a uložíme do ní hodnotu 8 (datový typ int). Do druhé proměnné s názvem text budeme ukládat textový řetězec (datový typ je string), který představuje textový řetězec (skládá z jednotlivých písmen, číslic a znaků). Do této proměnné uložíme text "Ahoj světe". Znak @ představuje odkaz na adresu v paměti.
static void Main(string[] args) { //Deklarace proměnné pro uložení celých čísel včetně její inicializace int pocet = 8; //Deklarace proměnné pro uložení textu včetně její inicializace string text = "Ahoj světe"; }
Kód 1: Příklad deklarace celočíselné a textové proměnné včetně její inicializace
Identifikátor pocet označuje přímo místo v paměti, kde je hodnota 8 uložena - viz Obrázek 3. U proměnné typu string, který je referenčního typu, identifikátor text označuje místo v paměti, v němž je uložen odkaz na jiné místo v paměti obsahující instanci (objekt) třídy string s uvedeným řetězcem.

Obrázek 3: Hodnotový a referenční typ - uložení v paměti