K1236.qxd
28.6.2006
12:57
StrÆnka 3
Obsah Předmluva
11
1.
Jazyk C# a platforma .NET
13
Proč .NET? Struktura prostředí .NET
13 14
Společný běhový systém CLR Řízený a neřízený kód Společný typový systém Specifikace společného jazyka
Datové typy v prostředí .NET Prostory jmen Základní datové typy Metadata a atributy
17 18 18 19
Sestavení neboli distribuční jednotka Některé nástroje pro vývoj aplikací pro .NET
19 19
Překlad programu v C# Sestavení distribuční jednotky (linker) Instalace sdíleného sestavení Klíč pro digitální podpis sestavení Práce s prostředky Použití komponent COM Disasemblování přeloženého programu Překlad z IL do vyšších programovacích jazyků IIS a ASP.NET Integrovaná vývojová prostředí
20 22 23 23 24 24 24 26 26 28
Novinky verze 2.0
2.
15 16 17 17
28
Genericita Neúplné třídy Nulovatelné typy Anonymní metody Statické třídy Různý přístup ke složkám vlastnosti Kovariance a kontravariance delegátů Blok iterátoru a příkaz yield
28 29 29 30 30 31 31 32
Aplikace a distribuční jednotka
35
Distribuční jednotka (sestavení) Soukromá distribuční jednotka
35 37
Jedna distribuční jednotka z několika zdrojových souborů Oddělený překlad jednotlivých souborů
38 38
K1236.qxd
4
28.6.2006
12:57
StrÆnka 4
Obsah Sestavení distribuční jednotky z modulů Vytvoření dynamické knihovny pro .NET Použití dynamické knihovny Kultura distribuční jednotky Instalace soukromé distribuční jednotky Specifikace umístění v konfiguračním souboru Vytvoření konfiguračního souboru
Sdílená distribuční jednotka Číslo verze Digitální podpis Odložený podpis Změna verze: Konfigurační soubor Automatické vytvoření nebo úprava konfiguračního souboru Instalace sdílené distribuční jednotky Zásady vydavatele Data aplikace v konfiguračním souboru
Prostředky neboli zdroje Ikona aplikace Textové řetězce Přístup k prostředkům Uložení řetězců v samostatné dynamické knihovně Kultura
Použití dynamické knihovny pro Win32 Základní použití dynamické knihovny pro Win32 Přejmenování funkce z DLL Import podle čísel Volací konvence Předávání parametrů (marshaling) Předávání struktury Výjimka v DLL Obsluha výjimky bez specifikace typu
Použití komponenty COM Komponenta MSXML 4.0 v .NET Vytvoření RCW z příkazového řádku Program pro výpis údajů ze souboru XML Použití komponenty při vývoji v IDE
Prostředí, v němž program běží Zpracování jednotlivých parametrů příkazové řádky Celý příkazový řádek Speciální adresáře Aktuální adresář Nastavujeme proměnnou prostředí Zjišujeme hodnotu proměnné prostředí Všechny systémové proměnné
Práce s neznámým sestavením (reflexe) Pomocné soubory k řešením Neznámá třída v neznámém sestavení implementuje známé rozhraní Neznámá třída obsahuje známou metodu
39 39 40 41 41 42 43
45 45 46 47 48 49 49 53 53
54 54 55 56 56 58
59 59 60 60 60 61 61 62 64
64 65 66 66 67
67 68 69 69 70 70 71 71
71 72 73 75
K1236.qxd
28.6.2006
12:57
StrÆnka 5
Obsah
3.
Základní dovednosti
77
Vyvíjíme datový typ
77
Třída, nebo struktura? Deklarace Konstruktor Vytvoření instance Přiřazování instancí Kopírování instancí (kopírovací konstruktor) Klonování objektů Vlastnosti Indexování Převod na řetězec Význačné hodnoty Význačné hodnoty, které neznáme v době překladu Sčítání Otočení znaménka Rovnost, a co s ní souvisí Hešování Konverze double na Cplx (implicitní) Konverze Cplx na double (explicitní)
Operace, které musí proběhnout Třída po sobě uklízí Úklid, když může nastat výjimka Částečný úklid
Nebezpečný kód Převod celého čísla na pole bajtů Převod instance třídy Bod na pole bajtů Překlad nebezpečného kódu
Užitečné triky Jak vypsat výčtový typ (příznaky) Jak upozornit na použití zastaralé metody Jak po odladění programu odstranit metodu (podmíněná metoda) Určujeme, které části kódu se přeloží (podmíněný překlad) Hledáme maximum (metody s proměnným počtem parametrů) Prohození obsahu dvou proměnných Inicializační procedura
Přetěžování „operátorů“ true a false Třída DBBool (trojhodnotová logika) Metody, které umožňují tyto operátory používat
Delegáty a události Vypisujeme tabulku funkce Třída, která může vyvolat událost (bod, který může změnit barvu) Třída, která reaguje na událost (obrázek se překreslí)
Generické třídy a metody (C# 2.0) Univerzální pár Univerzální metoda pro záměnu hodnot proměnných Univerzální metoda pro hledání maxima (omezení typových parametrů)
77 78 78 79 79 79 80 81 82 83 83 83 84 85 85 86 87 88
88 88 90 91
92 92 93 94
95 95 96 97 98 99 100 100
100 101 102
103 104 105 106
106 107 108 108
5
K1236.qxd
6
28.6.2006
12:57
StrÆnka 6
Obsah
4.
Některé užitečné třídy Ukládání dat Beztypové kolekce Generické kolekce (C# 2.0) Ukládáme hodnoty do instance třídy ArrayList Chceme zpracovat všechny hodnoty v kolekci Jak projít hodnoty pomocí enumerátoru Jak změnit prvek pomocí enumerátoru Měníme prvky v kolekci typu ArrayList Jak vyhledat daný prvek Třídíme ArrayList Třídíme v obráceném pořadí Třídíme část kolekce Univerzální metoda pro výpis všech prvků pole Jak vytvořit identickou kopii pole Jak překopírovat část pole Hledáme v poli Hledáme v setříděném poli Vlastní typová kolekce Typové (generické) kolekce v C# 2.0 Generátor náhodných čísel jako kolekce Vlastní enumerátor Vyhodnocování aritmetických výrazů (hešová tabulka) Převod výrazu do obráceného polského zápisu
Znakové řetězce Postupné vytváření řetězce Porovnání dvou řetězců Abecední řazení podle českých zvyklostí Abecední řazení podle jiných zvyklostí Malá a velká písmena Rozklad řetězce na slova Celá čísla v řetězci Reálná čísla v řetězci Začíná řetězec číslem? Desetinná čárka, nebo tečka? Výčtové typy a řetězce Velká písmena na počátku slov Odstranění opakovaných znaků Odstranění háčků a čárek Vložení hodnoty na zadané místo v řetězci Formátování data a času Vlastní formát data a času Čtení data
Podprocesy neboli vlákna Synchronizace Zamykáme prostředky: Příkaz lock Stavy vlákna Dvě nezávislá vlákna
109 109 109 110 111 111 112 112 113 113 114 114 115 115 116 116 117 117 118 121 121 122 123 125
128 128 129 129 130 131 132 133 134 135 135 135 136 136 137 138 139 140 141
141 142 144 144 144
K1236.qxd
28.6.2006
12:57
StrÆnka 7
Obsah Až obě vlákna dokončí svou práci, vypíšeme zprávu Dát možnost jiným Předčasně ukončujeme vlákno Vlákno reaguje na předčasné ukončení Komunikace dvou vláken
5.
Soubory, vstupy a výstupy Soubory a adresáře
153 153
Vytvoření jména souboru z existujícího jména Výpis obsahu adresáře
154 154
Základní vstupy a výstupy: Binární soubory
156
Zápis celých čísel do binárního souboru Když se něco nepovede Připisování do existujícího souboru Čtení celých čísel z binárního souboru Měníme vybrané záznamy (aktualizace binárního souboru)
Základní vstupy a výstupy: Textové soubory Vstup a výstup ve správném kódování Zápis do textového souboru Zápis v Unicode: Malý a velký endián Čtení z textového souboru Převod souboru z jednoho kódování do jiného Změna kódování, jiná možnost
Práce s pamětí Zápis do znakového řetězce Připisování do řetězce Zápis do pole bajtů
Konzola Filtr SORT: Řadíme vzestupně řádky v souboru Filtr SORT v jiné kódové stránce Řazení podle čísel řádků
Ukládáme objekty do souborů: Serializace Ukládáme objekty do binárních souborů Ukládáme obrázek do binárního souboru: Pomocné třídy Zápis do souboru, čtení ze souboru Složka, kterou nechceme uložit Serializujeme neserializovatelné (vlastní serializace)
Ukládání objektů v XML Evidence DVD (ukládáná třída) Zápis záznamů v XML Načtení objektu serializovaného v XML
6.
145 146 147 148 149
156 156 157 158 159
160 160 161 162 164 165 165
166 167 167 167
168 168 170 171
174 174 174 176 177 177
179 179 180 181
Používání jazyka XML
183
Analyzátor Microsoft XML
184
Vypisujeme autory a knihy Změna uloženého údaje Nová kniha: Vytvoření záznamu
185 186 187
7
K1236.qxd
8
28.6.2006
12:57
StrÆnka 8
Obsah Nová kniha: Připojení záznamu k dokumentu Nová kniha: Jiná možnost Uložení změn
Nástroje z prostoru jmen System.Xml Zapisujeme grafické objekty do XML: Jak napsat ukládané třídy Přečtení a výpis všech knih (postupné procházení souboru) Validace dokumentu během zpracování Jen validace dokumentu Jak vytvořit validátor Načtení celého dokumentu Výpis vybraných informací o knihách: Jiné řešení (DOM) Jak upravit záznam o knize Změna atributu elementu v XML Přidání jména autora do záznamu Nová kniha: Přidání nového záznamu Tabulka knih: Transformace XML na HTML Uložení obrázku do XML Načtení obrázku z XML
7.
Okno a práce s ním Okno Vlastnosti a metody okna Události Práce s okny v systému Windows
Prázdné okno Okno bez komponent
Vlastnosti okna Nastavujeme velikost okna Počáteční umístění okna Barva okna Částečně průhledné okno Okno, které se pomalu vynoří Okno s průhlednou klientskou oblastí Ikona v pruhu úloh Ikona okna Okno bez titulkové lišty Okno bez titulkové lišty, které lze přemisovat Okno s titulkovou lištou, které nelze přemisovat
Více oken v jedné aplikaci Okno vyvolané příkazem nabídky Okno bez systémové nabídky Okno, které nelze uzavřít Vlastněné okno Dětské okno Úvodní obrazovka
Okno zvláštního tvaru Region Okno se složitějším tvarem
187 187 188
189 189 191 193 195 196 198 198 200 201 202 203 204 206 208
209 209 209 210 210
211 211
213 213 213 214 215 215 216 217 218 218 219 220
221 221 221 222 226 227 227
230 230 232
K1236.qxd
28.6.2006
12:57
StrÆnka 9
Obsah
Vícedokumentové aplikace (MDI)
8.
234 234 235 236 236
Komponenty a dialogy
237
Komponenty (řídicí prvky)
237
Vkládáme komponentu do okna Reakce na stisknutí Chcete opravdu skončit? Vybíráme jednu z možností (skupina přepínačů) Zadání hodnoty s nezávazným seznamem voleb Přidáváme nabídku Kontextová nabídka Je po otevření okna zaměření na správné komponentě? Vstup: Jen velká písmena Vstup: Jen celé číslo bez znaménka Komponenta mění velikost s oknem Zobrazení detailu k vybrané položce seznamu Zobrazení struktury dokumentu XML Bublinová nápověda Přidáváme do okna panel nástrojů
Vlastní komponenta Volič: Naše komponenta pro výběr z několika možností Volič: Obsluha událostí Instalace komponenty do Visual Studia a její odstranění Použití nové komponenty
Předdefinované dialogy Otevření souboru Výběr několika souborů Otevíráme soubor jen ke čtení Ukládáme soubor pod jiným jménem Hledáme adresář Volíme barvu Volba písma Měníme nápisy na tlačítkách okna zpráv
Vlastní dialog Jak vytvořit vlastní modální dialog Jednoduchý dialog Použití našeho dialogu
9.
234
Hlavní okno Uspořádání dětských oken Dětské okno Přístup k dětským oknům Ukotvené dětské okno
Databáze Architektura ADO.NET Poskytovatelé
Základní operace s databází Připojení k databázi
237 239 239 240 242 243 244 245 246 247 247 248 249 251 253
254 255 257 258 259
260 261 261 262 264 265 266 268 269
272 272 273 275
277 277 279
279 280
9
K1236.qxd
10
28.6.2006
12:57
StrÆnka 10
Obsah Vytváříme tabulku Vložení jednoho záznamu do tabulky Vložení skupiny záznamů do tabulky (parametry) Celková cena všech knih z tabulky Měníme záznam Výpis databáze (připojené řešení) Přesun peněz mezi účty (transakce)
Odpojená řešení Výpis databáze (odpojené řešení) Prohlížení databáze v okně Měníme nadpisy sloupců v komponentě DataGrid Přidání záznamu pomocí datového adaptéru Změna záznamu Odstranění záznamu Úprava dat pomocí komponenty DataGrid Uložení tabulky ve formátu XML Načtení souboru v XML do datové množiny Informace o datové množině Použití relací
10. Webové aplikace založené na ASP.NET Základní úlohy Vytvoření virtuálního adresáře Zrušení virtuálního adresáře Prázdná webová aplikace Citát a jeho autor (relace) Přesměrování na jinou stránku z kódu
Skriptování ve stránce ASP.NET Přesměrování (reakce na událost ve skriptu) Přesný čas
Přenos dat Zpracováváme data z formuláře (metoda GET) Zpracováváme data z formuláře (metoda POST) Zpracováváme data z formuláře ASP.NET Zpracováváme URL, záhlaví a koláčky Předáváme data jiné stránce
Databáze Data z databáze na webové stránce
Na závěr Literatura Rejstřík
283 284 284 286 287 288 289
291 291 293 294 295 297 297 298 300 301 302 303
307 310 310 311 311 315 318
319 319 320
322 322 323 324 324 327
327 328
331 332 333