Hodnotové typy
Completion requirements
2. Hodnotové typy
2.2. Přetypování
Jazyk C# dovoluje přiřadit proměnné, jejíž datový typ má větší rozsah hodnot, proměnnou, jejíž typ má menší rozsah hodnot. Přiřazovaná hodnota se automaticky převede na hodnotu cílového typu, proběhne tzv. implicitní konverze neboli implicitní přetypování (přetypování – anglicky „Casting“). Přesněji: Jestliže se všechny hodnoty typu výrazu na pravé straně přiřazení vejdou do rozsahu typu proměnné na levé straně, bude vše v pořádku. Jinak nám překladač toto přiřazení nepovolí. [3]
Ilustrativní příklad ImplicitniKonverze
Program ImplicitniKonverze
- Popis: Příklad implicitní konverze
- Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem intPromenna datového typu int a inicializujte ji hodnotou 63840. Dále deklarujte další proměnnou s názvem longPromenna datového typu long. Vyzkoušejte vzájemné přiřazení obou proměnných, tj. druhé první a poté první druhé
- Řešení: Bude postupně probráno v následujícím textu
Na příkladu si ukážeme příklad implicitní konverze - viz Kód 1. Máme dvě proměnné, jedna je datového typu int a druhá long (long má větší rozsah než int). Je tedy možné přiřadit proměnné typu long proměnnou typu int (rozsah int se vešel do rozsahu long). Pokud bychom chtěli provést přiřazení opačně, překladač označí tento kód za chybný se slovy "Typ long nelze implicitně převést na typ int", protože long svým rozsahem nelze uložit do menšího rozsahu int.
static void Main(string[] args) { //Deklarace proměnné typu int včetně inicializace – menší rozsah než long int intPromenna = 63840; //Deklarace proměnné typu long včetně inicializace – větší rozsah než int long longPromenna; //Přiřazení proměnné typu int do proměnné typu long – O. K. longPromenna = intPromenna; //Toto přiřazení proměnné typu long do proměnné typu int nelze provést – K. O. intPromenna = longPromenna; }
Kód 1: Příklad implicitního přetypování
Dále nás také překladač upozorní, že "Existuje explicitní převod." Pokud bychom přeci jen na tomto přiřazení trvali, musíme použití tzv. explicitní přetypování.
Ilustrativní příklad ExplicitniKonverze
Program ExplicitniKonverze
- Popis: Příklad explicitní konverze
- Zadání: Deklarujte v hlavní metodě Main proměnnou s názvem longPromenna datového typu long a inicializujte ji hodnotou 63840. Proveďte přetypování (explicitní konverzi datového typu) této proměnné na datový typ int. Uložte hodnotu v této proměnné do jiné proměnné s názvem intPromenna, která je datového typu int
- Řešení: Bude postupně probráno v následujícím textu
static void Main(string[] args) { //Deklarace proměnné typu int – menší rozsah než dat. typ long int intPromenna; //Deklarace proměnné typu long včetně inicializace – větší rozsah než int long longPromenna = 63840; //Explicitní přetypování – lze pokud bude hodnota long v rozsahu int –> O. K. intPromenna = (int)longPromenna; }
Kód 2: Příklad explicitního přetypování