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


Explicitní přetypování lze provést, pokud hodnota proměnné na pravé straně od operátoru přiřazení spadá do rozsahu hodnot proměnné na levé straně od přiřazovacího operátoru (v opačném případě se přenesou jen některé z bitů reprezentujících hodnotu a výsledek bude chybný). V kódu na poslední příkazu vidíme, že explicitní převod se provede uvedením požadovaného datového typu konverze do kulatých závorek uvedených před názvem proměnné na pravé straně od operátoru přiřazení – viz Kód 2.
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í