C# Datové typy


Datové typy v C# hrají klíčovou roli při tvorbě struktury a způsobu uložení dat. Typy jsou podobné jako v JS, ale na rozdíl od JS musí být vytvářené (deklarované) s konkrétním typem.

Hodnotové typy (Value Types)

Hodnotové typy uchovávají svá data přímo v paměti, což je efektivní při práci s jednoduchými daty. Můžete si je představit jako „obálky“.

Patří sem:

  • int
    celá čísla (kladná i záporná) s menším rozsahem
    Rozsah: -2,147,483,6482,147,483,647
    Velikost: 4 bajty
    Příklad: int cislo = 100;
  • long
    celá čísla (kladná i záporná) s větším rozsahem
    Rozsah: -9,223,372,036,854,775,8089,223,372,036,854,775,807
    Velikost: 8 bajtů
    Čísla zakončujeme L.
    Příklad: long velkeCislo = 100000L;
  • float
    reálná čísla (tj. i s čísly za desetinnou čárkou) s menším rozsahem Rozsah: přibližně ±1.5 × 10^−45±3.4 × 10^38
    Přesnost: 6-7 desetinných míst
    Velikost: 4 bajty
    Čísla zakončujeme F.
    Příklad: float retezec = 3.14F;
  • double
    reálná čísla s větším rozsahem
    Ukládá desetinná čísla s dvojnásobnou přesností.
    Rozsah: přibližně ±5.0 × 10^−324±1.7 × 10^308
    Přesnost: 15-16 desetinných míst
    Velikost: 8 bajtů
    Čísla zakončujeme D (volitelně).
    Příklad: double presnejsi = 3.14159265358979;
  • decimal
    Ideální pro práci s finančními a měnovými hodnotami.
    Rozsah: ±1.0 × 10^−28±7.9 × 10^28
    Přesnost: až 28 číslic
    Velikost: 16 bajtů
    Čísla zakončujeme M.
    Příklad: decimal penize = 1000.99M;
  • char
    znaky (ukládá vždy jen jeden znak)
    Velikost: 2 bajty
    Zapisuje se v jednoduchých uvozovkách 'A'.
  • bool
    Uchovává logickou hodnotu true nebo false.
    Velikost: 1 bajt
    Příklad: bool jePravda = true;

Referenční typy (Reference Types)

Referenční typy ukládají odkaz na místo v paměti, kde jsou data uložena. Můžete si je představit jako „ukazatele“.

  • string
    Uchovává textové řetězce.
    Text zapisujeme do dvojitých uvozovek "text".
    Příklad: string zprava = "Ahoj světe!";
  • object
    Univerzální typ, který může uchovávat hodnoty libovolného datového typu.
    Příklad: object univerzalni = 123;
  • dynamic
    Proměnná, jejíž typ je určován až za běhu programu.
    Příklad: dynamic promena = "text";

Proměnné

Proměnná je místo sloužící k uložení dat

Deklarace (tvorba) proměnné:
Proměnné v C# musí být deklarovány s určeným datovým typem.

Syntax:

typ jmenoPromenne = hodnota;

Příklad:

int vek = 25;
string jmeno = "Tomáš";
bool jeAktivni = true;
double realneCislo = 5.99D;
char pismeno = 'D';

Konstanty

Konstanta je proměnná, která se po vytvoření nemůže měnit. Musíme ji vytvářet už se vstupní hodnotou (je inicializována).

Syntaxe:

const typ jmenoPromenne = hodnota;

Příklad:

const int pocet = 10;

Jména proměnných a konstant

  • mohou obsahovat písmena, čísla nebo _ podtržítko
  • nesmí začínat číslicemi
  • nesmí obsahovat mezery
  • nesmí být stejná jako jiná klíčová slova (např. string, bool)

Převod typu

Někdy potřebujeme převést proměnnou z jednoho typu do druhého (např. číslo na text, nebo naopak).
Automatické (implicitní) převody probíhají pouze tehdy, když nehrozí ztráta dat.

Mezi číselnými proměnnými dochází k automatickému převodu v tomto pořadí
char -> int -> long -> float -> double

Příklad:

int myInt = 9;
double myDouble = myInt;  

Manuální (explicitní) převody se používají, pokud hrozí ztráta dat.
Proto opačným směrem se hodnoty musí převést příkazem:
double -> float -> long -> int -> char
Tzn. před název převáděné proměnné napíšeme do závorek nový datový typ:

Příklad:

double myDouble = 9.78;
int myInt = (int) myDouble;

Přetypování pomocí Convert

Dochází k němu, pokud chceme hodnotu jednoho typu převést na jiný typ.

Convert.ToBoolean(hodnota)
Convert.ToDouble(hodnota)
Convert.ToString(hodnota)
Convert.ToInt32(hodnota)  // int
Convert.ToInt64(hodnota)  // long

Další informace

Výchozí hodnoty: Proměnné mají implicitní (základní) hodnoty, pokud nejsou inicializovány (nenapíšeme, co se mají rovnat).
Tyto implicitní hodnoty jsou např. int = 0, bool = false.

Některé proměnné ale základní hodnotu nemají, což může vytvořit v programu chybu a proto:

Nullable typy: Někdy potřebujeme, aby proměnná místo základní nebo žádné hodnoty ukazovala „nulu“ null. (Např. při práci s tabulkami nebo databázemi.)

Hodnotové typy lze rozšířit o hodnotu null pomocí ?:

int? nullableInt = null;
,