Referenční typy - pole
5. Implicitně typovaná pole
Jak již bylo řečeno, typ pole uváděný v deklaraci se musí shodovat s datovým typem jednotlivých prvků pole. Další možností je nechat kompilátor si odvodit datový typ prvků pole ze seznamu inicializátoru uvedených ve složené závorce. Obecná syntaxe takového zápisu pro jednorozměrné pole:
var identifikátorPole = new [ ] {seznamInicializátorů}
kde:
- var - klíčové slovo identifikující, že jde o typ implicitně typovaného pole
- identifikátorPole - definuje název jednorozměrného pole
- new - klíčové slovo vytvářející instanci pole
- seznamInicializátorů - představuje seznam jednotlivých hodnot prvků pole
Ilustrativní příklad ImplicitneTypovanePoleJmen
Program ImplicitneTypovanePoleJmen
- Popis: Vytvoření jednorozměrného implicitně typovaného pole s datovým typem string
- Zadání: Zkuste deklarovat implicitně typované pole obsahující jména: "Petr", "Jan", "Pavel", "Zdeněk"
- Řešení: Bude postupně probráno v následujícím textu
V následujícím kódu vidíme, že datový typ
uváděný v předchozích příkladech byl nahrazen klíčovým slovem var, které uvozuje identifikátor
proměnné – viz Kód 1. Dále
byly v zápisu také vynechány závorky uvozující název pole. Datový typ si
kompilátor odvodil ze seznamu jednotlivých inicializátoru – textových řetězců
(tedy typ string) uzavřených ve
složené závorce, které představují jednotlivé prvky pole.
//Vytvoření instance implicitně typovaného pole včetně jeho inicializace var jmena = new[] { "Petr", "Jan", "Pavel", "Zdeněk" };
Kód 1: Příklad vytvoření instance jednorozměrného implicitně typovaného pole
Je důležité zajistit, aby všechny inicializátory byly stejného datového typu, jinak kompilátor nahlásí chybu: Nebyl nalezen optimální typ pro implicitně typované pole. Tento přístup se používá zejména u objektů anonymní třídy, kde jsou inicializovány jednotlivé datové složky takových instancí.
Ilustrativní příklad ImplicitneTypovanePoleLidi
Program ImplicitneTypovanePoleLidi
- Popis: Vytvoření jednorozměrného implicitně typovaného pole s instancemi anonymní třídy
- Zadání: Zkuste deklarovat implicitně typované pole nazvané lide. Jednotlivé prvky pole jsou instancemi anonymní třídy. Třída obsahuje datové složky:
- Jmeno – jméno člověka (datový typ string). Jednotlivá jména: "Petr", "Jan", "Pavel", "Zdeněk"
- Vek – věk člověka (datový typ int). Věk lidí: 39, 67, 38, 45
- Řešení: Bude postupně probráno v následujícím textu
V následujícím kódu vidíme, že deklarace implicitně typovaného pole je stejná jako v předchozím příkladu – viz Kód 2. Rozdíl je ve výrazu napravo od přiřazení, kde konstruktor pole využívá další konstruktory anonymní třídy pro generování instancí této třídy. U konstruktoru každé instance pak stačí do složených závorek (značící identifikátory) doplnit hodnoty jednotlivých datových složek.
//Vytvoření instance implicitně typovaného pole s instancemi anonymní třídy var lide = new[] { new { Jmeno = "Petr", Vek = 39 }, new { Jmeno = "Jan", Vek = 67 }, new { Jmeno = "Pavel", Vek = 38 }, new { Jmeno = "Zdeněk", Vek = 45 } };
Kód 2: Příklad vytvoření instance jednorozměrného implicitně typovaného pole obsahující instance anonymní třídy