Obsah Předmluva Komu je tato kniha určena Co v této knize najdete Co v této knize nenajdete Rozdíly oproti prvnímu vydání Čeština Doprovodné CD Chyby Poděkování
15 15 15 16 16 16 17 17 17
KAPITOLA 1
Jazyk C# a platforma .NET
19
Proč .NET? Struktura prostředí .NET
19 20
Společný běhový systém CLR Řízený a neřízený kód Společný typový systém Specifikace společného jazyka
22 23 23 23
Datové typy v prostředí .NET
24
Jmenné prostory Základní datové typy Metadata a atributy
Sestavení Některé nástroje pro vývoj aplikací pro .NET Překlad programu v C# Vytvoření sestavení (linker) Instalace sdílené distribuční jednotky
K1933.indd 3
24 25 25
26 26 27 29 30
8/30/2011 3:18:55 PM
4
Obsah
Klíč pro digitální podpis distribuční jednotky 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í Nástroj pro konfiguraci aplikací pro .NET
Novinky v jazyce C# verze 2.0 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
Novinky verzí 3.0 a 3.5 Typ proměnné si odvodí překladač Anonymní typy Automatická implementace vlastností Parciální metody Rozšiřující metody Nepojmenované metody (lambda-výrazy)
Novinky verze 4.0 Nepovinné parametry Pojmenované skutečné parametry (pojmenované argumenty)
30 31 31 31 33 34 34 35
35 36 37 37 38 38 38 39 39
40 41 41 41 42 42 43
44 44 45
KAPITOLA 2
Aplikace a sestavení Sestavení (assembly) Soukromé sestavení Jedno sestavení z několika zdrojových souborů Oddělený překlad jednotlivých souborů Vytváříme sestavení z modulů Vytvoření dynamické knihovny pro .NET Použití dynamické knihovny Kultura sestavení Instalace soukromého sestavení Specifikace umístění v konfiguračním souboru Vytvoření konfiguračního souboru
K1933.indd 4
47 47 48 49 49 50 50 51 52 52 53 54
8/30/2011 3:18:55 PM
Obsah
Sdílené sestavení Číslo verze Digitální podpis Digitální podpis ve Visual Studiu Odložený podpis Změna verze: Konfigurační soubor Automatické vytvoření nebo úprava konfiguračního souboru Instalace sdíleného sestavení Instalace pomocí konfiguračního nástroje Zásady vydavatele Data aplikace v konfiguračním souboru Měnitelná data v konfiguračním souboru
Prostředky neboli zdroje Ikona aplikace Textové řetězce Přístup k prostředkům Uložení řetězů v samostatné dynamické knihovně Kultura Prostředky a Visual Studio
55 56 57 57 59 59 62 64 64 65 66
67 67 68 69 69 70 71
72
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
72 73 74 74 74 75 76 77
Použití komponenty 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á řádka 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é
K1933.indd 5
55
Použití dynamické knihovny pro Win32
Použití komponenty COM
5
78 78 79 79 80
81 81 82 82 83 83 83 84
8/30/2011 3:18:56 PM
6
Obsah
Práce s neznámým sestavením (reflexe) Neznámá třída implementuje známé rozhraní Neznámá třída v neznámém sestavení Neznámá třída obsahuje známou metodu
85 85 86 88
KAPITOLA 3
Základní dovednosti Vyvíjíme datový typ Třída, nebo struktura? Deklarace Konstruktor Vytvoření instance Přiřazování instancí Kopírování instancí (kopírovací konstruktor) Vlastnosti Zkrácený zápis vlastností a jeho omezení 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
Nezabezpečený kód Převod celého čísla na pole bajtů Převod instance třídy Bod na pole bajtů Překlad nezabezpečené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
K1933.indd 6
89 89 89 90 90 91 91 91 92 93 93 94 95 95 96 96 97 98 99 99
100 100 101 102
103 103 104 105
106 106 108 109 110 110 111 112
8/30/2011 3:18:56 PM
Obsah
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 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ů)
7
112 112 113
114 115 116 117
118 118 119 120
KAPITOLA 4
Některé užitečné třídy Ukládání dat Beztypové kolekce Generické kolekce (od C# 2.0) Ukládání hodnot do instance třídy List<> Zpracování všech hodnot v kolekci Procházení hodnot pomocí enumerátoru Změna prvku pomocí enumerátoru Měníme prvky v kolekci typu List<> Vyhledání daného prvku Třídíme List<> Třídíme v obráceném pořadí Třídíme část kolekce Vyhledávání v setříděné kolekci 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 Generátor náhodných čísel jako kolekce Vlastní enumerátor Nekonečná posloupnost (odložené vyhodnocování) Hledáme všechny prvky kontejneru s danou vlastností (LINQ) 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ů
K1933.indd 7
121 121 121 122 123 123 124 124 125 125 126 126 127 127 127 128 128 129 129 130 131 133 134 134 135
138 139 139
8/30/2011 3:18:56 PM
8
Obsah
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 Příkaz lock Stavy podprocesu Dva nezávislé podprocesy Vypíšeme zprávu, až oba podprocesy dokončí svou práci Dát možnost jiným Předčasně ukončujeme podproces Podproces reaguje na předčasné ukončení Komunikace dvou podprocesů
140 140 141 142 143 144 144 145 145 145 146 147 147 148 149 150
151 151 152 154 154 155 156 156 157 159
KAPITOLA 5
Soubory, vstupy a výstupy Soubory a adresáře Změna jména souboru Výpis obsahu adresáře
Základní vstupy a výstupy: Binární soubory 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í
K1933.indd 8
163 163 164 164
165 166 166 167 168 169
169 170
8/30/2011 3:18:56 PM
Obsah
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í k řetězci Zápis do pole bajtů
Konzola
171 172 173 174 175
176 176 176 177
177
Filtr SORT: Řadíme vzestupně řádky v souboru Filtr SORT v jiné kódové stránce Řazení podle čísel řádků
178 179 180
Ukládáme objekty do souborů: serializace
183
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
9
183 184 185 186 186
188 188 189 190
KAPITOLA 6
Používání jazyka XML Analyzátor Microsoft XML Vypisujeme autory a knihy Změna uloženého údaje Nová kniha: vytvoření záznamu Nová kniha: připojení záznamu k dokumentu Nová kniha: jiná možnost Uložení změn
Nástroje ze jmenného prostoru 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)
K1933.indd 9
191 192 193 194 194 195 195 196
196 196 199 201 203 204 206 207
8/30/2011 3:18:56 PM
10 Obsah
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í binárního obrázku do XML Načtení obrázku z XML
LINQ pro XML Datový zdroj Jaké kategorie knih jsou v souboru knihy.xml? Kategorie seřazené podle abecedy Výpis autorů podle kategorie Výpis autorů podle kategorie v jediném dotazu
208 209 210 211 212 214 216
216 217 217 218 219 220
KAPITOLA 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 Vytvoření základu okenní aplikace ve Visual Studiu
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řemísťovat Okno s titulkovou lištou, které nelze přemísťovat
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
K1933.indd 10
221 221 221 222 222
223 223 224
226 226 227 227 228 229 230 231 231 232 232 233
234 235 235 236 240 240 241
8/30/2011 3:18:56 PM
Obsah 11
Okno zvláštního tvaru Region Okno se složitějším tvarem
Vícedokumentové aplikace (MDI) Hlavní okno Uspořádání dětských oken Dětské okno Přístup k dětským oknům Ukotvené dětské okno
244 244 246
247 247 248 249 249 249
KAPITOLA 8
Komponenty a dialogy Komponenty (ovládací prvky) Vkládáme komponentu do okna Reakce na stisknutí Chcete opravdu skončit? Používáme skupinu 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 pro č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
K1933.indd 11
251 251 251 252 253 254 255 256 258 260 260 261 261 262 263 265 266
268 268 270 272 273
274 274 275 276 277 278 280 281 282
8/30/2011 3:18:56 PM
12 Obsah
Vlastní dialogové okno Definujeme modální dialog Jednoduché dialogové okno Použití vlastního dialogového okna
285 285 286 288
KAPITOLA 9
Windows Presentation Foundation Kde klepl uživatel myší? WPF ve Visual Studiu Ladění vzhledu aplikace Používáme běžné ovládací prvky Přidáváme nabídku (XAML) Přidáváme nabídku (vizuální návrh) Pozadí s plynulými barevnými přechody Jednoduchý webový prohlížeč Kreslení v okně Obrázek nám nevyhovuje: Statická transformace Rozdělíme plochu okna mřížkou na několik polí Aplikujeme transformace programově Komponenta se změní, když na ni ukážeme myší Jednoduchá animace Grafické objekty Komponenta z Windows Forms v okně z WPF Vlastní ovládací prvek pro WPF Použití vlastní komponenty Komponenta pro WPF v okně z Windows Forms
291 291 293 295 296 297 297 299 301 303 305 305 306 308 309 310 313 314 316 317
KAPITOLA 10
Databáze Architektura ADO.NET Poskytovatele
Základní operace s databází Připojení k databázi Jak vytvořit připojení v IDE Visual Studiu Jak zjistit připojovací řetězec v IDE Visual Studia Připojovací řetězec v konfiguračním souboru Vytváříme tabulku Vložení jednoho záznamu do tabulky Vložení skupiny záznamů do tabulky (parametry) Pracujeme s tabulkou v IDE Visual Studia Celková cena všech knih z tabulky
K1933.indd 12
321 321 323
324 324 326 327 327 328 329 330 332 334
8/30/2011 3:18:56 PM
Obsah 13
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ě Výpis tabulky: Řešení generované v IDE Visual Studia 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é sady Informace o datové sadě Použití relací Podrobnosti ke zvolenému záznamu
LINQ pro SQL Vytvoření datového zdroje pro LINQ ve Visual Studiu Vypisujeme knihy z tabulky KNIHA Složitější dotaz LINQ ručně: Definujeme si potřebné třídy sami
LINQ pro datovou sadu Vypisujeme příjmení autorů
334 335 336
338 338 340 342 343 344 346 346 347 349 350 351 351 354
355 355 356 357 358
359 359
KAPITOLA 11
Dotazovací jazyk LINQ Zdroj dat Jak upravit vlastní třídu, aby mohla být zdrojem dat Sudá Fibonacciova čísla menší než 1000
Jednoduché operace Sudé prvky celočíselného pole Zvlášť sudé a zvlášť liché hodnoty Jak odstranit opakované hodnoty Běžné agregační operace Součin všech prvků (vlastní agregace) Seřazený kontejner Pole seřazené v opačném pořadí Chceme druhé mocniny lichých čísel z daného pole
Dotaz a jeho struktura Výpis knih dané kategorie
K1933.indd 13
361 362 362 363
363 363 364 364 364 365 365 366 366
367 369
8/30/2011 3:18:56 PM
14 Obsah
Výpis autorů dané kategorie po skupinách Výpis autorů dané kategorie jednotlivě Celková cena knih dané kategorie Počty knih v jednotlivých kategoriích Výpis knih podle kategorií Nejdražší kniha v každé kategorii Která kniha byla kolikrát vypůjčena? Přehled výpůjček dané knihy Které knihy nebyly nikdy půjčeny?
369 370 371 371 372 373 373 374 376
KAPITOLA 12
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 Nasazení 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í na jinou stránku ze 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 Nastavení účtu pro MS SQL Express
K1933.indd 14
377 381 381 382 383 385 386 388
391 391 392
394 394 395 395 397 401
403 404 406
Na závěr
411
Literatura
413
Rejstřík
415
8/30/2011 3:18:56 PM