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,648
až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,808
až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^−45
až±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^−324
až±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^−28
až±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 hodnotutrue
nebofalse
.
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;