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,648až2,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,808až9,223,372,036,854,775,807
Velikost: 8 bajtů
Čísla zakončujemeL.
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^−45až±3.4 × 10^38
Přesnost: 6-7 desetinných míst
Velikost: 4 bajty
Čísla zakončujemeF.
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^−324až±1.7 × 10^308
Přesnost: 15-16 desetinných míst
Velikost: 8 bajtů
Čísla zakončujemeD(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^−28až±7.9 × 10^28
Přesnost: až 28 číslic
Velikost: 16 bajtů
Čísla zakončujemeM.
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 hodnotutruenebofalse.
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;