C# a .NET 2.0 profesionálně

Page 1

C# a .NET 2.0 PROFESIONÁLNĚ Andrew Troelsen


Pro C# 2005 and the .NET 2.0 Platform Andrew Troelsen Original English language edition published Apress L.P., 2560 Ninth Street, Suite 219, Berkeley, CA 94710 USA. Copyright © 2005 by Apress L.P. Czech language edition copyright © 2006 by ZONER software, s.r.o. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Apress L.P. Originální anglické vydání vydal Apress L.P., 2560 Ninth Street, Suite 219, Berkeley, CA 94710 USA. Copyright © 2005 Apress L.P. České vydání vydal ZONER software, s.r.o., copyright © 2006. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo předávána žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií, natáčení ani žádnými jinými systémy pro ukládání bez výslovného svolení Apress L.P.

C# a .NET 2.0 PROFESIONÁLNĚ Autor: Andrew Troelsen Copyright © ZONER software, s.r.o. Vydání první v roce 2006. Všechna práva vyhrazena. Zoner Press Katalogové číslo: ZR522 ZONER software, s.r.o. Nové sady 18, 602 00 Brno Překlad: RNDr. Jan Pokorný Odpovědný redaktor: Miroslav Kučera Šéfredaktor: Ing. Pavel Kristián DTP: Miroslav Kučera © Cover foto: Jiří Heller, HELLER.CZ s.r.o, www.heller.cz © Cover: PYRAMIDE, s.r.o. Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí. Veškeré dotazy týkající se distribuce směřujte na: Zoner Press ZONER software, s.r.o. Nové sady 18, 602 00 Brno tel.: 532 190 883, fax: 543 257 245 e-mail: knihy@zoner.cz http://www.zonerpress.cz

ISBN: 80-86815-42-0


Tuto knihu věnuji své matce, Mary Troelsen. Díky mamimko za to, jak si mně po dlouhá léta podporovala, i za roky, které teprve přijdou.



5

Obsah Informace o autorovi

31

Informace o odborném korektorovi

31

Poděkování

31

Úvod

32

Stručný přehled témat knihy

33

Sdělte nám svůj názor

40

Zdrojové soubory

40

Část I – Představení C# a platformy .NET

41

Kapitola 1

43

Filozofie .NET

Dřívější stav věcí

43

Jak se žije programátorům API C/Win32

44

Jak se žije programátorům C++/MFC

44

Jak se žije programátorům Visual Basicu 6.0

44

Jak se žije programátorům Java/J2EE

45

Jak se žije programátorům COM

45

Jak se žije programátorům DNA Windows

46

Řešení .NET

47

Úvod do stavebních bloků platformy .NET (CLR, CTS a CLS)

48

Role knihoven základních tříd

48

Co do této tabulky přináší C#

49

Další programovací jazyky vnímající .NET

50

Život ve vícejazyčném světě

51

Přehled assembly .NET

52

Assembly z jednoho souboru a vícesouborové assembly

53

Účel společného intermediárního jazyka

54

Výhody plynoucí z CIL

56

Kompilace CIL do instrukcí specifických pro platformu

57

Účel metadat typů .NET

57

Účel manifestu assembly

58

Společný systém typů

59

Typ třída CTS

59

Typ struktura CTS

60

Typ rozhraní CTS

60

Typ výčet CTS

61

Typ delegát CTS

61

Členy typů CTS

62


6 Interně zabudované datové typy CTS

62

Společná specifikace jazyků

63

Zajištění souladu s CLS

65

Společný runtime jazyků

65

Rozlišení pojmů – assembly, jmenný prostor a typ

66

Programátorský přístup k jmennému prostoru

69

Odkazy na externí assembly

71

Použití ildasm.exe

72

Prohlížení kódu CIL

73

Prohlížení metadat typů

73

Prohlížení metadat assembly

74

Rozmisťování runtime .NET

74

Nezávislost .NET na platformě

75

Shrnutí

77

Kapitola 2

Budování aplikací C#

79

Instalace .NET Frameworku 2.0 SDK

79

Kompilátor C# pro režim příkazového řádku (csc.exe)

80

Konfigurace kompilátoru csc.exe

81

Konfigurace dalších nástrojů .NET pro režim příkazového řádku

82

Budování aplikací C# pomocí csc.exe

82

Odkazy na externí assembly

84

Kompilace několika zdrojových souborů pomocí csc.exe

85

Odkazy na více externích assembly

86

Příkazové soubory pro csc.exe Výchozí příkazový soubor (csc.rsp) Debugger pro režim příkazového řádku (cordbg.exe) Ladění na příkazovém řádku Budování aplikací .NET pomocí TextPadu

86 87 88 88 89

Zobrazování klíčových slov C# jinou barvou

90

Konfigurace filtru pro soubory *.cs

91

Zavěšení TextPadu na csc.exe

91

Sdružování spouštěcích příkazů s prvky nabídky

92

Zapnutí vkládání fragmentů kódu C#

93

Budování aplikací .NET pomocí SharpDevelop

94

Co nabízí SharpDevelop

95

Prohlížeč projektu a prohlížeč tříd

96

Prohlížeč assembly (Assembly Scout)

97

Designéři formulářů Windows

98

Budování aplikací .NET pomocí Visual C# 2005 Express

99


7 Budování aplikací .NET s Visual Studiem 2005

100

Co nabízí Visual Studio 2005

101

Průzkumník řešení (Solution Explorer)

101

Prohlížeč tříd (Class View)

103

Okno definice kódu

103

Prohlížeč objektů (Object Browser)

104

Integrovaná podpora pro refaktoraci kódu

105

Expanze kódu a technologie obklopování kódu

107

Vizuální designér tříd (Visual Class Designer)

107

Nástroj pro testování objektů

110

Integrovaný systém nápovědy

111

Částečný katalog dalších vývojářských nástrojů .NET

112

Shrnutí

113

Část II – Programovací jazyk C# Kapitola 3

Základy jazyka C#

Anatomie jednoduchého programu C#

115 117 117

Variace na metodu Main()

118

Zpracování argumentů příkazového řádku

119

Specifikace argumentů příkazového řádku s Visual Studiem 2005

120

Zajímavá odbočka: třída System.Environment

121

Definování tříd a vytváření objektů

122

Účel konstruktorů

123

Vznikají tu snad díry v paměti (memory leaks)?

125

Definice "objektu aplikace"

125

Třída System.Console

127

Základní vstupní a výstupní operace s třídou Console

127

Formátování výstupu na konzoli

128

Znaky pro formátovací řetězce .NET

129

Zřízení viditelnosti členů Zřízení viditelnosti typů

131 132

Výchozí hodnoty třídy členských proměnných

133

Výchozí hodnoty a lokální proměnné

134

Syntaxe inicializace členských proměnných

134

Definice konstantních dat

136

Odkazy na konstantní data Definice datových členů určených pouze ke čtení Statické členské proměnné určené pouze ke čtení Klíčové slovo static

136 137 139 139


8 Statické metody

140

Statická data

141

Statické konstruktory

143

Statické třídy Modifikátory parametrů metod

145 146

Výchozí chování předávaných parametrů

147

Modifikátor out

147

Modifikátor ref

149

Modifikátor params

149

Iterační konstrukce

150

Cyklus for

151

Cyklus foreach

151

Cykly while a do/while

152

Rozhodovací konstrukce a porovnávací operátory Příkaz if/else Příkaz switch Hodnotové a referenční typy

153 153 154 155

Hodnotové typy, referenční typy a přiřazovací operátor

157

Hodnotové typy obsahující referenční typy

159

Předávání referenčních typů hodnotou

161

Předávání referenčních typů odkazem

162

Hodnotové a referenční typy: závěrečné srovnání

163

Operace boxing a unboxing Několik praktických ukázek operací boxing a unboxing Operace unboxing u vlastních hodnotových typů Práce s výčty .NET Základní třída System.Enum Třída, co trůní úplně nahoře: System.Object Výchozí chování System.Object

164 165 167 168 171 173 175

Překrývání výchozího chování System.Object

176

Překrývání System.Object.ToString()

176

Překrývání System.Object.Equals()

177

Překrývání System.Object.GetHashCode()

179

Testování překrytých členů

179

Statické členy System.Object

180

Datové typy jmenného prostoru System(a zkrácená notace C#)

181

Experimenty s číselnými datovými typy

184

Členy System.Boolean

184

Členy System.Char

185

Rozklad hodnot z řetězce dat

186

System.DateTime a System.TimeSpan

186


9 Datový typ System.String

187

Základní operace s řetězci

188

Řídicí znaky

189

Práce s doslovnými řetězci C#

190

Role System.Text.StringBuilder

191

Pole v .NET 192 Pole jako parametry (a návratové hodnoty)

194

Práce s vícerozměrnými poli

194

Základní třída System.Array

196

Typy C#, které mohou obsahovat null Jak se pracuje s typy, které mohou obsahovat null Operátor ??

197 198 199

Definice vlastních jmenných prostorů

200

Plně kvalifikovaný název typu

201

Definice s použitím aliasu

203

Vytváření vnořených jmenných prostorů

204

"Výchozí jmenný prostor" Visual Studia 2005

205

Shrnutí

Kapitola 4

206

Objektově orientované programování s C#

Třída v C# Přetěžování metod

207 207 209

Odkaz na sebe v C# pomocí this

211

Definice veřejného rozhraní třídy

213

Pilíře OOP

214

Zapouzdření

214

Dědění

215

Polymorfismus

216

První pilíř: služby C# pro zapouzdření

217

Vynucení zapouzdření pomocí tradičních metod accessor a mutator

219

Jiná forma zapouzdření: vlastnosti třídy

219

Interní reprezentace vlastností C#

223

Jak se řídí viditelnost příkazů get/set vlastnosti

224

Vlastnosti určené pouze pro čtení nebo pouze pro zápis

225

Statické vlastnosti

225

Druhý pilíř: podpora C# pro dědění

226

Řízení vytváření tříd pomocí klíčového slova base

228

Několik slov k základním třídám

230

Udržení rodinných tajemství – klíčové slovo protected

230

Jak se zamezí dědění: zapečetěné třídy

231


10 Programování modelu zadržování/delegování Definice vnořených typů Třetí pilíř: podpora polymorfismu v C# Klíčová slova virtual a override

232 234 236 237

Opětovná návštěva klíčového slova sealed

238

Co jsou abstraktní třídy

239

Vynucování polymorfických činností: abstraktní metody

240

Skrývání členů Pravidla C# pro přetypování

244 246

Jak se určí "typ" zaměstnance

248

Přetypování čísel

249

Parciální typy C#

249

Dokumentace zdrojového kódu C# přes XML

251

Formátovací znaky souboru XML s komentáři kódu Transformace souboru XML s komentáři kódu Shrnutí

Kapitola 5

253 254 254

Doba života objektu

255

Třídy, objekty a odkazy

255

Základy doby života objektu

256

CIL klíčového slova new

257

Účel kořenů aplikace

259

Generace objektu

260

Typ System.GC

261

Jak se vynutí svoz odpadků

262

Budování finalizovatelných objektů

265

Překrývání System.Object.Finalize() Podrobnosti k procesu finalizace Budování likvidovatelných objektů

266 268 268

Opětovné využití klíčového slova using C#

270

Budování finalizovatelných a likvidovatelných typů

272

Formalizovaný vzor likvidace Shrnutí

Kapitola 6

273 274

Strukturované zpracování výjimek

Óda na chyby, závady a výjimky Účel zpracování výjimek .NET Atomy zpracování výjimek .NET Základní třída System.Exception Nejjednodušší možný příklad

275 275 276 277 278 279


11 Generování obecné výjimky Zachytávání výjimek Konfigurace stavu výjimky

281 283 284

Vlastnost TargetSite

284

Vlastnost StackTrace

285

Vlastnost HelpLink

286

Vlastnost Data

287

Výjimky na úrovni systému (System. SystemException)

289

Výjimky na úrovni aplikace (System. ApplicationException)

289

Budování vlastních výjimek, první pokus

290

Budování vlastních výjimek, druhý pokus

291

Budování vlastních výjimek, třetí pokus

292

Zpracování vícenásobných výjimek

293

Všeobecné příkazy catch

295

Opakované generování výjimek

296

Vnitřní výjimky

296

Blok Finally

298

Kdo generuje co?

298

Výsledek nezpracované výjimky

300

Ladění nezpracovaných výjimek ve Visual Studiu 2005

300

Shrnutí

301

Kapitola 7

Rozhraní a kolekce

303

Definice rozhraní v C#

303

Implementace rozhraní v C#

304

Rozdíl mezi rozhraním a abstraktní základní třídou

306

Volání členů rozhraní na úrovni objektů

307

Získávání odkazů na rozhraní: klíčové slovo as Získávání odkazů na rozhraní: klíčové slovo is

308 308

Rozhraní jako parametry

309

Rozhraní jako návratové hodnoty

311

Pole typů rozhraní

312

Explicitní implementace rozhraní

313

Řešení konfliktů v názvech Budování hierarchií rozhraní Rozhraní s více základními rozhraními

315 316 317

Implementace rozhraní pomocí Visual Studia 2005

318

Budování typů, jimiž lze procházetv cyklu (IEnumerable a IEnumerator)

320

Co jsou iterátory C# Budování objektů, které lze klonovat (ICloneable)

322 324


12 Propracovanější ukázka klonování

326

Budování objektů, kterélze porovnávat (IComparable)

329

Specifikace více možných řazení (IComparer)

332

Vlastní vlastnosti, vlastní typy řazení Rozhraní jmenného prostoru System.Collections Účel rozhraní ICollection

333 334 335

Účel rozhraní IDictionary

336

Účel rozhraní IDictionaryEnumerator

336

Účel rozhraní IList

337

Typy tříd v System.Collections

337

Jak se pracuje s typem ArrayList

338

Jak se pracuje s typem Queue (fronta)

339

Jak se pracuje s typem Stack (zásobník)

340

Jmenný prostor System.Collections.Specialized

341

Shrnutí

342

Kapitola 8

Rozhraní pro zpětná volání, delegáti a události

343

Rozhraní pro zpětná volání

343

Delegáti .NET

347

Definice delegáta v C#

348

Základní třídy System.MulticastDelegate a System.Delegate

351

Nejjednodušší možný příklad delegáta

352

Prozkoumání objektu delegáta Vylepšení typu Car pomocí delegátů Zapnutí vícenásobného volání

354 356 358

Propracovanější ukázka delegátů

361

Delegáti jako parametry

362

Analýza kódu pracujícího s delegáty

365

Co v kontextu delegátů znamená kovariance

365

Události C#

368

Události – pohled pod kapotu

369

Naslouchání přicházejícím událostem

371

Zjednodušení registrace událostí ve Visual Studiu 2005

372

"Vyštafírovaná" událost Anonymní metody C# Přístup k "vnějším" proměnným Konverze ovladačů událostí na podkladové delegáty Shrnutí

373 375 376 377 379


13 Kapitola 9

Pokročilé techniky C# pro sestrojování typů

Vybudování vlastního indexeru

381 381

Variace na indexer garáže

383

Interní reprezentace typu indexerů

384

Indexery: pár drobností nakonec

385

Přetěžování operátorů

386

Přetěžování binárních operátorů

387

Operátory += a -=

389

Přetěžování unárních operátorů

389

Přetěžování operátorů pro rovnost

390

Přetěžování porovnávacích operátorů

391

Interní reprezentace přetížených operátorů

392

Komunikace s přetíženými operátory z jazyků, pro které je přetěžování operátorů výzvou

393

Závěrečné úvahy o přetěžování operátorů

395

Konverze vlastních typů

395

Opakování: číselné konverze

396

Opakování: konverze mezi typy tříd, které pocházejí z jedné hierarchie

396

Vytváření vlastních konverzních rutin Jiné explicitní konverze pro typ Square Definice implicitních konverzních rutin

397 399 400

Interní reprezentace vlastních konverzních rutin

401

Klíčová slova C# pro pokročilé

402

Klíčové slovo checked

402

Klíčové slovo unchecked

405

Práce s ukazateli

406

Klíčové slovo sizeof

413

Preprocesorové direktivy C#

414

Specifikace regionů kódu

414

Podmíněná kompilace kódu

415

Shrnutí

Kapitola 10

417

Generika

419

Operace boxing a unboxing a jejich vztah k System.Object

419

Stinné stránky operací boxing a unboxing

421

Typová bezpečnost a silně typované kolekce Stinné stránky operace boxing a silně typovaných kolekcí Jmenný prostor System.Collections.Generic Průzkum typu List<T> Vytváření generických metod Vynechání typových parametrů

422 424 426 427 430 431


14 Vytváření generických struktur (nebo tříd) Klíčové slovo default v generickém kódu Vytvoření vlastní generické kolekce

433 434 436

Omezování parametrů typu pomocí where

437

Nepodporovaná omezení vztahující se k operátorům

440

Vytváření generických základních tříd

441

Vytváření generických rozhraní

442

Vytváření generických delegátů Simulace generických delegátů pod .NET 1.1 Několik slov k vnořeným delegátům Shrnutí

446 446

Část III – Programování s assembly .NET Kapitola 11

443 445

Úvod do assembly .NET

Účel assembly .NET

447 449 449

Assembly prosazují opětovné využívání kódu

449

Assembly zřizují hranice typů

450

Assembly jsou jednotky opatřené verzí

450

Assembly plně popisují samy sebe

451

Assembly se dají konfigurovat

451

Formát assembly .NET

451

Záhlaví Win32

452

Záhlaví CLR

452

Kód CIL, metadata typů a manifest assembly

454

Nepovinné prostředky assembly

454

Assembly tvořené jediným souborem a několika soubory

455

Jak se buduje a konzumuje jednosouborová assembly

457

Průzkum manifestu

460

Průzkum CIL

461

Průzkum metadat

462

Vybudování klientské aplikace C#

463

Vybudování klientské aplikace ve Visual Basicu .NET

465

Ukázka dědění přes jazyky

466

Vybudování a zkonzumování vícesouborové assembly

467

Průzkum souboru ufo.netmodule

468

Průzkum airvehicles.dll

468

Konzumace vícesouborové assembly

469

Privátní assembly Identita privátní assembly

470 471


15 Proces sondování

471

Konfigurace privátních assembly

472

Konfigurační soubory a Visual Studio 2005

474

Konfigurační utilita .NET Frameworku 2.0

474

Sdílené assembly

476

Silné názvy assembly

477

Silný název pro CarLibrary.dll

479

Přiřazování silných názvů pomocí Visual Studia 2005

480

Instalace sdílených assembly do GAC a jejich odstraňování

481

Účel odloženého podepsání Konzumace sdílené assembly Průzkum manifestu SharedCarLibClient Konfigurace sdílených assembly Zmrazení aktuální sdílené assembly

481 483 485 485 486

Vybudování sdílené assembly verze 2.0.0.0

486

Dynamické přesměrovánína konkrétní verzi sdílené assembly

488

Další návštěva utility .NET Framework 2.0 Configuration

489

Průzkum interní skladby GAC

490

Assembly politiky vydavatele

492

Vypnutí politiky vydavatele

493

Prvek <codeBase>

493

Jmenný prostor System.Configuration

495

Konfigurační soubor stroje

497

Vázání assembly – celkový pohled

497

Shrnutí

498

Kapitola 12

Reflexe typu, pozdní vázání a programování založené na atributech

Nezbytnost metadat typů

499 499

Prohlídka (části) metadat výčtu EngineState

500

Prohlídka (části) metadat typu Car

501

Průzkum prvku TypeRef

502

Dokumentace samotné assembly

503

Dokumentace odkazovaných assembly

503

Dokumentace řetězcových literálů

504

Reflexe

504

Třída System.Type

505

Získání odkazu na typ pomocí System.Object.GetType()

506

Získání odkazu na typ pomocí System.Type.GetType()

507

Získání odkazu na typ pomocí typeof()

507


16 Vybudování vlastního prohlížeče metadat

508

Reflexe metod

508

Reflexe členských proměnných a vlastností

508

Reflexe implementovaných rozhraní

509

Zobrazení pár drobností nakonec

509

Implementace metody Main()

510

Reflexe parametrů metod a návratových hodnot

511

Dynamicky načítané assembly

513

Reflexe sdílených assembly

515

Pozdní vázání

517

Třída System.Activator

517

Volání metod bez parametrů

518

Volání metod s parametry Programování s atributy

519 520

Konzumenti atributů

521

Používání předdefinovaných atributů v C#

521

Specifikace parametrů pro konstruktory atributů

523

Atribut Obsolete v akci

524

Zkrácená notace atributů v C#

524

Budování vlastních atributů

525

Používání vlastního atributu

525

Restrikce na používání atributů

526

Atributy na úrovni assembly (a modulu)

528

Soubor AssemblyInfo.cs Visual Studia 2005

528

Reflexe atributů pomocí brzkého vázání

529

Reflexe atributů pomocí pozdního vázání

530

Využití reflexe, pozdního vázání a vlastních atributů

532

Budování rozšiřitelné aplikace

532

Vybudování CommonSnappableTypes.dll

533

Vybudování zapojitelného modulu C#

534

Vybudování zapojitelného modulu Visual Basicu .NET

535

Vybudování rozšiřitelné formulářové aplikace Windows

535

Shrnutí

Kapitola 13

538

Procesy, aplikační domény, kontexty a hostitelé CLR

Rekapitulace tradičních procesů Win32 Stručný souhrn informací o vláknech Komunikace s procesy pod platformou .NET

539 539 540 542

Seznam běžících procesů

544

Průzkum konkrétního procesu

545


17 Průzkum sady vláken procesu

545

Průzkum sady modulů procesu

547

Programátorské startování a zastavování procesů

549

Aplikační domény .NET

550

Seznam aplikačních domén procesu

552

Programátorské vytváření nových aplikačních domén

554

Programátorské odebírání aplikační domény Hranice kontextů

555 556

Kontextově agilní typy a typy vázané na kontext

557

Definice objektu vázaného na kontext

559

Kontrola kontextu objektu

559

Shrnutí procesů, aplikačních domén a kontextů

561

Hostování samotného CLR

561

Vykonávání CLR bok po boku

562

Načtení konkrétní verze CLR

563

Jiní hostitelé CLR Shrnutí

Kapitola 14

564 564

Budování vícevláknových aplikací

Vztah mezi procesem, aplikační doménou, kontextem a vláknem Problémy souběžného zpracování a účel synchronizace vláken

565 565 566

Stručná rekapitulace delegátů .NET

567

Asynchronní povaha delegátů

570

Metody BeginInvoke() a EndInvoke()

570

Rozhraní System.IAsyncResult

570

Volání metody v asynchronním stylu

571

Synchronizace volajícího vlákna

572

Účel delegáta AsyncCallback

573

Účel třídy AsyncResult

575

Předávání a příjem vlastních stavových dat

575

Jmenný prostor System.Threading Třída System.Threading.Thread

576 577

Získání statistik o aktuálním vláknu

578

Vlastnost Name

579

Vlastnost Priority

580

Programátorské vytváření sekundárních vláken

581

Jak se pracuje s delegátem ThreadStart

581

Jak se pracuje s delegátem ParameterizedThreadStart

584

Vlákna na popředí a na pozadí

585

Problém souběžného zpracování

586


18 Synchronizace pomocí klíčového slova lock C#

589

Synchronizace pomocí typu System.Threading.Monitor

590

Synchronizace pomocí typu System.Threading.Interlocked

591

Synchronizace pomocí atributu [Synchronization]

592

Programování s třídouTimer a delegátem TimerCallback

593

Fond vláken CLR

595

Shrnutí

596

Kapitola 15

CIL a účel dynamických assembly

597

Úvahy o povaze programování CIL

597

Průzkum direktiv, atributů a operačních kódů CIL

598

Účel direktiv CIL

599

Účel atributů CIL

599

Účel operačních kódů CIL

599

Odlišení operačních kódů CIL od mnemonického CIL

600

Zásobníkový charakter CIL

600

Technika cesty tam a zpět

602

Účel návěští kódu CIL

605

Interakce s CIL: modifikace souboru *.il

606

Kompilace kódu CIL pomocí ilasm.exe

607

Kompilace kódu CIL pomocí SharpDevelop

609

Kompilace kódu CIL pomocí ILIDE#

609

Účel peverify.exe Direktivy a atributy CIL

610 611

Specifikace externě odkazovaných assembly v CIL

611

Definice aktuální assembly v CIL

611

Definice jmenných prostorů v CIL

612

Definice typu třídy v CIL

613

Definice a implementace rozhraní v CIL

614

Definice struktur v CIL

615

Definice výčtů v CIL

615

Kompilace souboru CILTypes.il

616

Knihovna základních tříd .NET, C# a mapování datových typů CIL

616

Definice členů typu v CIL

617

Definice datových členských proměnných v CIL

617

Definice konstruktorů typu v CIL

618

Definice vlastností v CIL

619

Definice parametrů členu

620

Průzkum operačních kódů CIL

621

Direktiva .maxstack

623


19 Deklarace lokálních proměnných v CIL

623

Mapování parametrů na lokální proměnné v CIL

624

Skrytý odkaz this

625

Reprezentace iteračních konstrukcí v CIL

626

Vybudování assembly .NET s CIL

627

Vybudování CILCars.dll

627

Vybudování CILCarClient.exe Dynamické assembly Průzkum jmenného prostoru System.Reflection.Emit

630 632 633

Účel typu System.Reflection.Emit.ILGenerator

634

Emitování dynamické assembly

635

Emitování assembly a sady modulů

637

Účel typu ModuleBuilder

639

Emitování typu HelloClass a řetězcové členské proměnné

640

Emitování konstruktorů

640

Emitování metody SayHello()

641

Použití dynamicky vygenerované assembly

642

Několik vět o System.CodeDOM

643

Shrnutí

644

Část IV – Programování s knihovnami .NET Kapitola 16

Jmenný prostor System.IO

Průzkum jmenného prostoru System.IO Typy Directory(Info) a File(Info) Abstraktní základní třída FileSystemInfo Jak se pracuje s typem DirectoryInfo

645 647 647 648 649 650

Výčet FileAttributes

652

Výčet jednotlivých souborů pomocí typu DirectoryInfo

653

Vytváření podadresářů s typem DirectoryInfo

654

Jak se pracuje s typem Directory

655

Jak se pracuje s třídou DriveInfo

656

Jak se pracuje s třídou FileInfo

657

Metoda FileInfo.Create()

658

Metoda FileInfo.Open()

659

Metody FileInfo.OpenRead() a FileInfo.OpenWrite()

660

Metoda FileInfo.OpenText()

661

Metody FileInfo.CreateText() a FileInfo.AppendText() Jak se pracuje s typem File Nové členy typu File v .NET 2.0

661 661 662


20 Abstraktní třída Stream Jak se pracuje s objekty FileStream Čtenáři a zapisovatelé proudů (třídy StreamReader a StreamWriter)

664 665 667

Zápis do textového souboru

668

Čtení z textového souboru

669

Přímé vytváření typů StreamWriter a StreamReader

670

Jak se pracuje s typy StringWriter a StringReader

670

Jak se pracuje s binárními čtenáři a zapisovatelidat (třídy BinaryWriter a BinaryReader)

672

Programátorské "špehování" souborů

674

Asynchronní vstupní a výstupní operace se soubory

677

Shrnutí

678

Kapitola 17

Serializace objektů

Serializace objektu Účel objektových grafů Konfigurace objektů pro serializaci Veřejné a privátní datové členské proměnné, veřejné vlastnosti Výběr formátovače pro serializaci

679 679 681 682 683 683

Rozhraní IFormatter a IRemotingFormatting

684

Loajalita k typu mezi formátovači

685

Serializace objektů s BinaryFormatter

686

Deserializace objektů pomocí BinaryFormatter Serializace objektů pomocí SoapFormatter

687 688

Serializace objektů pomocí XmlSerializer

689

Řízení vygenerovaných dat XML

690

Uchovávání kolekce objektů

692

Přizpůsobení serializačního procesu

694

Důkladnější pohled na serializaci objektu

695

Přizpůsobení procesu serializace pomocí rozhraní ISerializable

696

Přizpůsobení procesu serializace pomocí atributů

698

Přidělování verze serializovatelným objektům

699

Shrnutí

702

Kapitola 18

Vrstva .NET remoting

703

Definice .NET remotingu

703

Jmenné prostory .NET remotingu

704

Pracovní rámec .NET remotingu Proxy a zprávy

705 706

Kanály

707

Opětovná návštěva u formátovačů .NET

708


21 Dáme to teď všechno do kupy!

709

Několik slov k rozšiřování standardních rozvodů

709

Termíny v .NET remotingu

710

Volby pro dirigování objektů: MBR nebo MBV?

710

Aktivační volby pro typy dirigované odkazem: WKO nebo CAO?

712

Stavová konfigurace dobřeznámých typů: unikát nebo jediné volání?

713

Souhrn charakteristických rysů objektových typů dirigovaných odkazem

714

Základy rozmisťování projektu .NET remoting

715

Vybudování první distribuované aplikace

716

Vybudování všeobecné assembly

716

Vybudování serverové assembly

717

Vybudování assembly SimpleRemoteObjectClient.exe

718

Otestování aplikace remotingu

719

Co představuje typ ChannelServices

720

Co představuje typ RemotingConfiguration

721

Aktivační režim typů dobře známých objektů

723

Rozmístění serverové aplikace na vzdálený stroj

724

Přidání kanálu TCP do výbavy

725

Několik slov k IpcChannel

726

Vzdálené konfigurační soubory

726

Budování souborů *.config na straně serveru

727

Budování souborů *.config u klienta

728

Práce s objekty dirigovanými hodnotou

729

Vybudování všeobecné assembly

730

Vybudování serverové assembly

731

Vybudování klientské assembly

732

Objekty aktivované klientem

734

Pronájem času objektů CAO a unikátních WKO

737

Výchozí chování pronájmu času

737

Změna výchozích charakteristik pronájmu času

740

Úpravy pronájmu času na straně serveru

741

Úpravy pronájmu času u klienta

741

Sponzorství pronájmu časuna straně serveru (a u klienta)

742

Alternativní hostitelé vzdálených objektů

743

Hostování vzdálených objektů pomocí služby Windows Hostování vzdálených objektů pomocí IIS Asynchronní remoting Účel atributu [OneWay] Shrnutí

744 748 750 751 752


22 Kapitola 19

Lepší okna se System.Windows.Forms

Přehled jmenného prostoru System.Windows.Forms

753 753

Jak se pracuje s typy formulářů Windows

755

Ruční vybudování hlavního okna

755

Důsledná separace záležitostí

757

Účel třídy Application Zábava s třídou Application Delegát System.EventHandler

758 759 760

Anatomie formuláře

761

Funkcionalita třídy Control

762

Zábava s třídou Control

765

Reakce na událost MouseMove

766

Jak se určí, kterým tlačítkem myši se kliklo

767

Reakce na události klávesnice

768

Funkcionalita třídy Form Životní cyklus typu Form Budování aplikací Windows s Visual Studiem 2005

769 770 773

Zapnutí zastaralých ovládacích prvků

775

Pitva projektu formulářů Windows Visual Studia 2005

776

Zpracování událostí v době návrhu

777

Třída Program

778

Automaticky odkazované assembly

778

Jak se pracuje s MenuStrip a ContextMenuStrip

778

Přidání TextBox do MenuStrip

781

Vytvoření kontextové nabídky

783

Zaškrtávání prvků nabídky Jak se pracuje s ovládacími prvky StatusStrip Návrh systému nabídek

785 787 788

Návrh stavového proužku

789

Jak se pracuje s časovačem (typ Timer)

792

Přepínání zobrazení

793

Zobrazení nápovědy pro prvky nabídek

794

Zřízení stavu "Připraven" Jak se pracuje s ovládacími prvky ToolStrip Práce s kontejnery objektu ToolStrip Budování aplikace s vícedokumentovým rozhraním Vybudování rodičovského formuláře

795 795 800 802 802

Vybudování dceřiného formuláře

803

Vytvoření dceřiných oken

804

Shrnutí

805


23 Kapitola 20

Realizace grafických dat s GDI+

807

Nástin jmenných prostorů GDI+

807

Přehled jmenného prostoru System.Drawing

808

Utilitní typy System.Drawing

809

Typy Point a PointF

810

Typy Rectangle a RectangleF

811

Třída Region

812

Co představuje třída Graphics

812

Relace Paint

814

Zrušení platnosti klientské oblasti formuláře

815

Získání objektu Graphics mimo ovladač události Paint

816

Stručně o likvidaci objektu Graphics Souřadnicový systém GDI+

818 819

Výchozí měrná jednotka

820

Specifikace jiné měrné jednotky

821

Specifikace jiného počátku v systému souřadnic Definování barev

822 824

Třída ColorDialog

825

Manipulace s písmem

826

Jak se pracuje s rodinami písem

827

Jak se pracuje s řezy a velikostmi písma

829

Výpis nainstalovaných písem

831

Třída FontDialog Nástin jmenného prostoru System.Drawing.Drawing2D Kreslení pomocí pera Jak se pracuje s konci čar Kreslení pomocí štětce

833 835 836 838 840

Jak se kreslí se šrafovanými štětci

841

Jak se kreslí štětcem s texturou

843

Jak se kreslí lineárním gradientním štětcem

844

Kreslení obrázků

846

Přetahování a testování kliknutí v ovládacím prvku PictureBox

848

Testování kliknutí myší v nakreslených obrázcích Testování kliknutí v obrázcích, které nemají tvar obdélníka Formát prostředku .NET

851 854 857

Jmenný prostor System.Resources

858

Programátorské vytvoření souboru *.resx

858

Vybudování souboru *.resources

859

Svázání souboru *.resources s assembly .NET

860

Jak se pracuje se zapisovateli prostředků

860


24 Generování prostředků z Visual Studia 2005 Programátorské čtení prostředků Shrnutí

Kapitola 21

861 863 864

Programování s ovládacími prvky formulářů Windows 865

Svět ovládacích prvků formulářů Windows

865

Ruční přidávání ovládacích prvků do formuláře

866

Typ Control.ControlCollection

868

Přidávání prvků do formulářů ve Visual Studiu 2005

869

Základní ovládací prvky

870

Zábava s popisky

871

Zábava s textovými poli

872

Zábava s typem MaskedTextBox

875

Zábava s tlačítky

877

Zábava s ovládacími prvky CheckBox, RadioButton a GroupBox

879

Zábava se seznamem, který je vybaven zaškrtávacími políčky

883

Zábava se seznamem typu ListBox

885

Zábava se seznamem, který má textové pole Konfigurace tabulátorového pořadí prvků Průvodce tabulátorovým pořadím prvků

886 888 888

Nastavení výchozího tlačítka formuláře

889

Exotičtější ovládací prvky

889

Zábava s kalendářem

890

Zábava s vysvětlivkami

891

Zábava se záložkami

893

Zábava s posuvníkem typu TrackBar

894

Zábava s panely

897

Zábava s číselníky

898

Zábava s poskytovatelem informací o chybě

900

Zábava se stromovým zobrazením založeným na TreeView

903

Zábava s webovým prohlížečem

908

Budování vlastních ovládacích prvků formulářů Windows Vytvoření obrázků

909 911

Vybudování uživatelského rozhraní v době návrhu

911

Implementace jádra ovládacího prvku CarControl

912

Definice vlastní události

913

Definice vlastní vlastnosti

914

Řízení animace

916

Nakreslení přezdívky auta

916

Otestování typu CarControl

916


25 Vybudování hostitelského formuláře pro CarControl

917

Účel jmenného prostoru System.ComponentModel

919

Zdokonalení vzhledu CarControl v době návrhu

920

Definice výchozí vlastnosti a výchozí události

921

Přiřazení obrázku k vlastnímu ovládacímu prvku v Toolboxu Budování vlastních dialogových oken Vlastnost DialogResult Dědění formulářů Dynamicky určovaná pozice ovládacích prvků formulářů Windows

922 924 925 926 929

Vlastnost Anchor

929

Vlastnost Dock

930

Tabulkový a plovoucí layout Shrnutí

Kapitola 22

931 933

Přístup k databázím s ADO.NET

Vysokoúrovňová definice ADO.NET Dvě tváře ADO.NET Pojem poskytovatel dat ADO.NET

935 935 936 937

Poskytovatelé dat od Microsoftu

939

Vybraní poskytovatelé dat od jiných výrobců

940

Dodatečné jmenné prostory ADO.NET

940

Typy jmenného prostoru System.Data

941

Účel rozhraní IDbConnection

942

Účel rozhraní IDbTransaction

943

Účel rozhraní IDbCommand

943

Účel rozhraní IDbDataParameter a IDataParameter

944

Účel rozhraní IDbDataAdapter a IDataAdapter

944

Účel rozhraní IDataReader a IDataRecord

945

Abstrakce poskytovatelů dat pomocí rozhraní

946

Zvýšení flexibility pomocí konfiguračních souborů aplikace

948

Model továrny poskytovatele v .NET 2.0

949

Registrované továrny poskytovatelů dat

950

Kompletní příklad továrny poskytovatele dat

951

Prvek <connectionStrings>

954

Instalace databáze Cars

955

Jak se z Visual Studia 2005 připojit k databázi Cars Připojená vrstva ADO.NET

956 957

Jak se pracuje s objekty připojení

959

Jak se v .NET 2.0 pracuje s tvůrci připojovacích řetězců

961

Jak se pracuje s objekty příkazů

962


26 Jak se pracuje s čtenáři dat Získání více sad výsledků najednou pomocí čtenáře dat Modifikace dat tabulek pomocí objektu příkazů

963 965 966

Vkládání nových záznamů

968

Odstraňování existujících záznamů

969

Aktualizace existujících záznamů

970

Jak se pracuje s objekty parametrizovaných příkazů Specifikace parametrů pomocí typu DbParameter

970 971

Vykonání uložené procedury pomocí DbCommand

973

Asynchronní přístup k datům pod .NET 2.0

975

Odpojená vrstva ADO.NET

976

Účel sady dat

977

Členy typu DataSet Jak se pracuje s typy DataColumn

978 980

Vybudování datového sloupce

981

Zapnutí automatické inkrementace ve vybraných sloupcích

982

Přidání datového sloupce do datové tabulky

982

Jak se pracuje s datovými řádky Co znamená vlastnost DataRow.RowState Jak se pracuje s datovými tabulkami Jak se v NET 2.0 pracuje se čtenáři datových tabulek Uchovávání sady dat (a datových tabulek) jako XML Vázání datových tabulek na uživatelská rozhraní Odstraňování řádků programátorsky

983 984 985 987 988 990 992

Filtry a řazení

993

Aktualizace řádků

995

Jak se pracuje s typem DataView

997

Jak se pracuje s datovými adaptéry

998

Naplnění sady dat pomocí datového adaptéru Mapování databázových názvů na přívětivé názvy Aktualizace databáze pomocí objektů datových adaptérů

999 1000 1001

Nastavení vlastnosti InsertCommand

1002

Nastavení vlastnosti UpdateCommand

1003

Nastavení vlastnosti DeleteCommand

1003

Automatické generování příkazů SQL pomocí tvůrců

1004

Sady dat s více tabulkami a objekty datových relací

1006

Navigace po tabulkách propojených relacemi

1009

Průvodci zaměření na práci s daty

1011

Silně typované sady dat

1013

Automaticky vygenerovaná datová komponenta

1014

Shrnutí

1014


27

Část V – Webové aplikace a webové služby XML Kapitola 23

Webové stránky ASP.NET 2.0 a webové ovládací prvky

1015 1017

Účel HTTP

1017

Co jsou webové aplikace a webové servery

1018

Jak se pracuje s virtuálními adresáři IIS

1019

Vývojářský server ASP.NET 2.0

1021

Účel HTML

1021

Struktura dokumentu HTML

1022

Vývoj formuláře HTML

1023

Budování uživatelského rozhraní založeného na HTML

1024

Účel skriptů u klienta

1025

Ukázka skriptu u klienta

1027

Ověřování platnosti dat formuláře v default.htm

1027

Odeslání dat formuláře (GET a POST)

1028

Vybudování klasické stránky ASP

1029

Odpověď pro data odeslaná metodou POST Problémy s klasickými ASP stránkami

1030 1031

Hlavní přednosti ASP.NET 1.x

1031

Hlavní zdokonalení a rozšíření, která přináší ASP.NET 2.0

1032

Jmenné prostory ASP.NET 2.0 Model kódu webové stránky ASP.NET

1033 1034

Fungování stránky založené na modelu jediného souboru

1034

Jak se pracuje s modelem kódu v pozadí

1041

Detaily adresářové struktury webu ASP.NET

1044

Účel složky Bin

1045

Účel složky App_Code

1047

Kompilační cyklus stránky ASP.NET 2.0

1048

Kompilační cyklus stránek tvořených jediným souborem

1048

Kompilační cyklus stránek se souborem kódu v pozadí

1049

Řetěz dědění typu Page Typ System.Web.UI.Page Interakce s příchozím HTTP požadavkem

1050 1051 1051

Získání statistik o prohlížeči

1053

Přístup k příchozím datům formuláře

1054

Vlastnost IsPostBack

1054

Interakce s odchozí odpovědí HTTP

1055

Zapisování obsahu HTML

1056

Přesměrování uživatelů

1057


28 Životní cyklus webové stránky ASP.NET

1057

Účel atributu AutoEventWireUp

1058

Událost Error

1060

Co je podstatou webových ovládacích prvků

1061

Zpracování události na straně serveru

1062

Vlastnost AutoPostBack

1063

Typ System.Web.UI.Control

1064

Výpis prvků obsažených ve stránce

1064

Dynamické přidávání (a odstraňování) ovládacích prvků

1066

Klíčové členy typu System.Web.UI.WebControls.WebControl

1068

Rozdělení webových ovládacích prvků ASP.NET

1069

Několik slov k System.Web.UI.HtmlControls Vybudování jednoduchého webu ASP.NET 2.0

1069 1070

Jak se pracuje se vzory stránek

1070

Definice obsahové stránky Default.aspx

1074

Návrh obsahové stránky skladu

1075

Návrh stránky, kde si uživatel vybere své auto

1081

Účel validačních ovládacích prvků

1083

Prvek RequiredFieldValidator

1085

Prvek RegularExpressionValidator

1085

Prvek RangeValidator

1086

Prvek CompareValidator

1086

Vytváření validačních souhrnů Shrnutí

Kapitola 24

1087 1088

Webové aplikace ASP.NET 2.0

1089

Potíže se stavem

1089

Techniky pro správu stavu v ASP.NET

1091

Účel stavu zobrazení ASP.NET

1092

Jak se pracuje se stavem zobrazení

1092

Přidávání vlastních dat do stavu zobrazení

1094

Několik slov ke stavu ovládacího prvku

1095

Účel souboru Global.asax

1096

Prostředek poslední záchrany, globální ovladač nezpracovaných výjimek

1097

Základní třída HttpApplication

1098

Vztah mezi aplikací a relací

1098

Jak se udržují stavová data na úrovni aplikace

1099

Modifikace aplikačních dat

1102

Zpracování shození webové aplikace

1103

Jak se pracuje s aplikační cache

1103


29 Zábava s ukládáním dat do cache Modifikace souboru *.aspx Uchovávání dat relace Další členy HttpSessionState Co jsou cookies

1104 1106 1109 1112 1113

Vytváření cookies Čtení přicházejících dat cookie Konfigurace webové aplikace ASP.NET pomocí Web.config

1114 1115 1116

Zapnutí sledování prostřednictvím <trace>

1118

Přizpůsobení výstupu chyb přes <customErrors>

1119

Volby pro ukládání stavu přes <sessionState>

1120

Utilita ASP.NET 2.0 pro administraci webu

1122

Dědění konfigurace

1122

Shrnutí

1124

Kapitola 25

Webové služby XML

Účel webových služeb XML Přednosti webových služeb XML

1125 1125 1126

Definice klienta webové služby XML

1126

Základní stavební bloky webové služby XML

1127

Stručně o zjišťovacích službách

1127

Stručně o popisných službách

1128

Stručně o přenosovém protokolu

1129

Jmenné prostory .NET webové služby XML Průzkum jmenného prostoru System.Web.Services Ruční vybudování webové služby XML Otestování webové služby XML pomocí WebDev.WebServer.exe

1129 1130 1130 1131

Otestování webové služby pomocí IIS

1132

Prohlídka kontraktu WSDL

1132

Automaticky generovaná testovací stránka

1133

Vlastní testovací stránka

1133

Vybudování webové služby XML s Visual Studiem 2005

1134

Implementace webové metody TellFortune()

1135

Role základní třídy WebService

1137

Popis atributu [WebService]

1137

Efekt vlastností Namespace a Description Vlastnost Name Popis atributu [WebServiceBinding]

1138 1138 1139

Jak se dá ignorovat ověřování souladu s BP 1.1

1140

Jak se úplně vypne ověřování souladu s BP 1.1

1140


30 Popis atributu [WebMethod]

1141

Dokumentace webové metody přes vlastnost Description

1141

Předcházení konfliktů názvů ve WSDL pomocí vlastnosti MessageName

1141

Budování stavových webových služeb pomocí vlastnosti EnableSession

1142

Průzkum popisného jazyka webové služby (WSDL)

1144

Definice dokumentu WSDL

1145

Prvek <types>

1146

Prvek <message>

1147

Prvek <portType>

1148

Prvek <binding>

1149

Prvek <service>

1149

Opětovná návštěva u protokolů webové služby XML

1150

Vázání HTTP GET a HTTP POST

1150

Vázání SOAP

1152

Utilita wsdl.exe příkazového řádku

1153

Transformace WSDL do kostry webové služby XML na straně serveru

1154

Transformace WSDL do proxy u klienta

1155

Průzkum kódu proxy

1156

Výchozí konstruktor

1156

Podpora synchronního vyvolávání

1157

Podpora asynchronního vyvolávání

1158

Vybudování klientské aplikace

1158

Generování kódu proxy z Visual Studia 2005

1159

Vystavení vlastních typů z webových metod

1161

Vystavení pole

1161

Vystavení struktury

1162

Vystavení sady dat ADO.NET

1163

Klient formulářů Windows

1164

Reprezentace typu u klienta

1165

Zjišťovací protokol služby (UDDI)

1166

Komunikace s UDDI přes Visual Studio 2005

1167

Shrnutí

1168

Rejstřík

1169


31

Informace o autorovi ANDREW TROELSEN je Microsoft MVP (Visual C#) a zároveň partner, lektor a konzultant u Intertech Training (www.IntertechTraining.com), což je centrum pro vzdělávání vývojářů .NET a J2EE. Napsal mnoho knih, mezi něž patří Developer’s Workshop to COM and ATL 3.0 (Wordware Publishing, 2000), COM and .NET Interoperability (Apress, 2002), Visual Basic .NET and the .NET Platform: An Advanced Guide (Apress, 2001) a získal cenu za C# and the .NET Platform (Apress, 2003). Andrew dále napsal řadu článků o .NET pro MSDN a MacTech (kde prozkoumával ty aspekty platformy .NET, které jsou nezávislé na platformách). Často také vystupuje na všelijakých konferencích a v diskusních skupinách. Andrew v současné době žije se svou ženou Amandou v Minneapolis ve státě Minnesota. Svůj volný čas tráví čekáním na to, až Wild vyhrají Stanley Cup, až Vikingové vyhrají Super Bowl (bylo by pěkné, kdyby se jim to podařilo dřív, než půjde do důchodu), a až se Timberwolves stanou několikanásobnými vítězi NBA.

Informace o odborném korektorovi GAVIN SMYTH je profesí softwarový inženýr s tolika lety zkušeností z oblasti vývoje softwaru, že už je ani nepočítá. Participoval na široké paletě projektů: od ovladačů zařízení až k aplikacím hostovaným na více zařízeních; na mnoha odlišných platformách, jako jsou "holé železo", operační systémy pracující v reálném čase a systémy Unix a Windows; a v mnoha jazycích, mezi něž kromě mnoha jiných patří assembler, C++, Ada a C#. Pracoval pro takové klienty jsou BT a Nortel. V současné době je zaměstnán u společnosti Microsoft. Gavin také publikoval několik pěkných kousků odborné beletrie, nicméně zjistil, že kritizovat to, co udělali jiné lidé, ho uspokojuje mnohem víc. Když zrovna na své zahradě nebojuje s plevelem a s mravenci, pokouší se přemluvit roboty LEGO, aby dělali to, co od nich chce, aby dělali (a abychom byli upřímní – dělá to jen kvůli svým dětem).

Poděkování Dokončit třetí vydání této knihy by bylo zhola nemožné, kdyby se na něm nepodílelo mnoho talentovaných osobností. Především patří mé díky veškerému personálu u vydavatelství Apress. Jako vždy měli neskutečné starosti a práci s tím, aby z mého surového rukopisu vyrobili úhledný produkt. Musím poděkovat svému odbornému korektorovi, jímž byl Gavin Smyth (aka Eagle Eye), který si dal opravdu záležet na tom, aby byla kniha perfektní. Samozřejmě – veškeré zbývající chyby (překlepy, chyby v kódu, nebo jinde), které mohly v knize zůstat, padají plně a pouze na mou hlavu.


32 Děkuji svým přátelům a své rodině, kteří (zase ještě jednou) tolerovali, že jsem měl pro ně velmi málo času, a že jsem někdy byl úplně mimo. Další dík patří mým přátelům a spolupracovníkům u Intertech Training. Vaší podpory (jak přímé, tak i nepřímé) se nesmírně cením. Nakonec bych chtěl poděkovat své ženě Mandy a "všem dětem" za to, že mě mají rádi a že mě povzbuzují.

Úvod Ještě si vzpomínám, jak jsem před lety nabídl vydavatelství Apress knihu, která se měla zabývat nastupujícím vývojovým softwarovým kitem s kódovým názvem Next Generation Windows Services (NGWS). Jak možná víte, z NGWS se nakonec stalo to, čemu říkáme platforma .NET. Současně s tím, jak jsem pracoval na počáteční verzi svého rukopisu, jsem paralelně prozkoumával programovací jazyk C# i platformu .NET. Byl to fantastický projekt – musím však přiznat, že mi ničil nervy víc než dost, protože je opravdu na mrtvici psát o takové technologii, která v průběhu svého vývoje podstupuje skutečně zásadní změny. Nakonec to ale dobře dopadlo (po mnoha bezesných nocích) a první vydání knihy C# and the .NET Platform vyšlo souběžně s prvním vydáním .NET 1.0 Beta 2. Pokud si dobře vzpomínám, bylo to někdy v létě roku 2001. Byl jsem nesmírně šťastný a vděčný, když jsem viděl, že kniha má příznivé ohlasy od kritiků. Nejvíce mě ale potěšilo, když moji knihu příznivě přijala i samotná čtenářská obec. Časem byla nominovaná na cenu Jolt Award (nevyhrál jsem... ať jdou do háje!) a pak v roce 2003 na Referenceware Excellence Award v kategorii knih o programování (Já jsem vyhrál? Super!). Druhé vydání této knihy (C# and the .NET Platform, Second Edition) mi poskytlo příležitost rozvinout existující obsah s ohledem na verzi 1.1 platformy .NET. Přestože druhé vydání knihy nabízelo hodně nových témat, mnohé kapitoly a příklady nebylo možné do finálního produktu zařadit. Nyní, když kniha vstoupila do třetí etapy své existence, jsem rád, že mohu říci, že můj rukopis obsahuje (téměř) všechna témata i všechny příklady, které jsem nebyl schopen namačkat do předchozích verzí. Text tohoto vydání nejenže bere v úvahu všelijaká cingrlátka a parádičky přicházející s .NET 2.0, ale zařadil jsem do něho i řadu kapitol, které už mám napsané dlouho, a které jsem ještě nikdy nepublikoval (jako například obsah společného intermediárního jazyka, Common Intermediate Language, neboli CIL). Stejně jako v předchozích vydáních, i v třetím vydání předkládám programovací jazyk C# a knihovny základních tříd .NET v přívětivém a vstřícném tónu. Nikdy jsem vlastně nechápal potřebu některých odborných autorů vychrlit ze sebe takovou prózu, že vznikne něco jako studijní slovník pro přijímací zkoušky, a nikoliv srozumitelná kniha, která se dá skutečně číst. I toto nové vydání je zaměřeno tak, aby poskytlo potřebné informace k tomu, abyste mohli skutečně na úrovni budovat softwarová řešení dneška. V knize tak nebudete trávit mládí prozkoumáváním esoterických detailů, které ve skutečném světě nebudete vůbec potřebovat.


33

Vy a já jsme tým Autoři píší o technologiích na základě poptávky nějaké skupiny lidí (a musíte si uvědomit, že i já jsem jeden z nich). Určitě víte, že budování softwarových řešení pomocí libovolné platformy zahrnuje neobyčejně mnoho všelijakých podrobností a že velmi závisí na konkrétním oddělení, kde pracujete, na firmě, klientské základně i na předmětu, kterého se budování softwaru týká. Možná děláte v oblasti elektronického publikování, vyvíjíte systémy pro vládu nebo pro místní zastupitelstvo, nebo pracujete pro NASA nebo pro armádu. Pokud jde o mne, vyvinul jsem software pro vzdělávání dětí, různé n-vrstevné systémy, a také různé projekty z oblasti zdravotnictví a bankovnictví. Mohu téměř s jistotou tvrdit, že kód, který píšete na svém pracovišti, bude mít jen velmi málo společného s kódem, který píšu já (pokud jsme náhodou v minulosti nespolupracovali!). Proto jsem se v této knize úmyslně rozhodl, že nebudu vytvářet příklady, v nichž by byl jejich kód těsně svázaný s nějakým konkrétním odvětvím nebo programátorskou branží. Rozhodl jsem se proto, že vysvětlím C#, OOP, CLR a knihovny základních tříd .NET 2.0 pomocí příkladů, které jsou nedogmatické vzhledem k odvětvím. Místo toho, aby každý příklad plnil daty nějakou mřížku, vypočítával velikost splátky, nebo cokoliv jiného v tom duchu, rozhodl jsem se pro předmět, k němuž má nějaký vztah skutečně každý: auťáky. A abychom mohli dát vše do kupy, budeme potřebovat několik geometrických struktur nějakého zaměstnance. A zde vstupujete na scénu vy. Mým úkolem bude, abych vám co nejlépe vysvětlil programovací jazyk C# a klíčové aspekty platformy .NET. Podniknu také vše, co mohu, abych vás vybavil nástroji a strategiemi, které budete potřebovat, budete-li si chtít prohlubovat znalosti získané při studiu této knihy. Vaším úkolem bude strávit tyto informace a aplikovat je ve vašich konkrétních programovacích úlohách. Je mi úplně jasné, že vaše projekty se nebudou točit okolo vašich automobilových miláčků, ale o tom přesně aplikování znalostí je! Na závěr vás ujišťuji, že jakmile pochopíte pojmy prezentované v tomto textu, budete perfektně vybaveni tak, abyste mohli budovat řešení .NET, které bude ušité na míru vašemu jedinečnému programovacímu prostředí.

Stručný přehled témat knihy Třetí vydání této knihy je logicky rozčleněno do pěti samostatných částí. Každá z nich obsahuje několik kapitol, které k sobě "nějak patří". Jestliže jste četli předchozí vydání knihy, povšimnete si jistých podobnosti v názvech kapitol, nicméně si uvědomte, že téměř každá stránka byla aktualizovaná novým obsahem a rozšířenými příklady. Také si povšimněte, že z některých témat z prvního a druhého vydání knihy (jako jsou serializace objektů a svoz odpadků .NET, neboli garbage collector) se staly samostatné kapitoly. Jak samozřejmě očekáváte, třetí vydání knihy obsahuje několik zbrusu nových kapitol (včetně kapitoly zasvěcené syntaxi a sémantice CIL). Nechybí také podrobný výklad nových schopností přicházejících s verzí 2.0. Rozdělení probírané látky na jednotlivé části a kapitoly obsahuje následující stručný přehled.


34

Část I – Představení C# a platformy .NET Účelem první části knihy je, abyste se aklimatizovali na klíčové aspekty platformy .NET, na systém typů .NET, a také na rozličné vývojářské nástroje (z nichž mnohé jsou open-source), které se používají při sestrojování aplikací .NET. Přitom se průběžně seznámíte s některými základními prvky programovacího jazyka C#.

Kapitola 1 – Filozofie .NET První kapitola má posloužit jako páteř pro zbytek knihy. Začneme s průzkumem světa tradičního programování pod Windows a odhalíme některé nedokonalosti předchozího stavu věcí. Primárním cílem kapitoly ovšem je, abyste se dobře obeznámili s řadou centrálních stavebních bloků .NET, mezi něž patří společný runtime jazyků (Common Language Runtime, CLR), společný systém typů (Common Type System, CTS), společná specifikace jazyků (Common Language Specification, CLS) a knihovny základních tříd. Dále se poprvé podíváte na formát programovacího jazyka C# a assembly .NET. Pak prozkoumáte nezávislou povahu platformy .NET a nezapomeneme na roli společné infrastruktury jazyků (Common Language Infrastructure, CLI).

Kapitola 2 – Budování aplikací C# Cílem kapitoly je obeznámit vás s procesem kompilace a ladění souborů zdrojového kódu C# pomocí různých nástrojů a technik. Nejprve se naučíte pracovat s kompilátorem příkazového řádku (csc.exe) a se soubory odpovědí C#. Ve zbývající části kapitoly pak prozkoumáte řadu všelijakých integrovaných vývojových rozhraní, jako jsou TextPad, SharpDevelop, Visual C# 2005 Express a Visual Studio 2005. Zmíníme se také o řadě dalších open-source nástrojů (Vil, NAnt, NDoc atd.), které by měl mít schované v záloze každý vývojář .NET.

Část II – Programovací jazyk C# V této části se probírají až do morku kostí podrobnosti programovacího jazyka C#, včetně nových syntaktických konstrukcí přicházejících s .NET 2.0. V této části uvidíte vystavené všechny členy CTS (třídy, rozhraní, struktury, výčty a delegáty). Dozvíte se také, jak se sestrojují generické typy.

Kapitola 3 – Základy jazyka C# V této kapitole prozkoumáme klíčové konstrukce programovacího jazyka C#. Porozumíte základním technikám sestrojování tříd, rozdílům mezi hodnotovými a referenčními typy, pochopíte, co je boxing a unboxing, a zjistíte, jakou roli hraje oblíbenec každého z nás – základní třída System. Object. Kapitola 3 rovněž ilustruje, jak platforma .NET pracuje s různými všudypřítomnými programovacími konstrukcemi, jako jsou výčty, pole a zpracování řetězců. V kapitole nakonec probereme řadu témat specifických pro .NET 2.0, např. datové typy, které mohou obsahovat null.


35

Kapitola 4 – Objektově orientované programování s C# Účel kapitoly 4 spočívá v průzkumu detailů toho, jak se C# vypořádává s jednotlivými "pilíři" OOP: zapouzdření, dědění a polymorfismus. Jakmile se seznámíte s klíčovými slovy a syntaxí pro budování hierarchií tříd, zjistíte, jak se prostřednictvím XML dokumentuje kód.

Kapitola 5 – Doba života objektu V této kapitole prozkoumáme, jak CLR pomocí "svozu odpadků" (garbage collector) .NET spravuje paměť. Pochopíte účel kořenů aplikace, účel generování objektů, a účel typu System.GC. Jakmile zvládnete tyto základy, zbytek kapitoly vás provede procesem finalizace (přes metodu System.Object.Finalize()). Nechybí informace o objektech, které lze likvidovat (přes rozhraní IDisposable).

Kapitola 6 – Strukturované zpracování výjimek Těžištěm šesté kapitoly je diskuse o tom, jak pomocí strukturovaného zpracování výjimek zpracovávat anomálie, které se při běhu vyskytnou ve vašem kódu. Dozvíte se podrobnosti o klíčových slovech C# (try, catch, throw a finally), které vám umožní zpracovat vzniklé závady, a pochopíte, jaký je rozdíl mezi výjimkami na úrovni aplikace a na úrovni systému. V kapitole dále prozkoumáme nástroje Visual Studia 2005, které vám umožní ladit takové výjimky, které unikly vaší pozornosti.

Kapitola 7 – Rozhraní a kolekce Látka v této kapitole vám má pomoci, aby se vám dostalo do krve programování založené na objektech. V sedmé kapitole tedy probereme programování založené na rozhraních. Dozvíte se, jak se definují typy, které podporují více chování, jak se tato chování odhalují při běhu, a jak se dají tato chování selektivně skrývat pomocí explicitní implementace rozhraní. Abychom předvedli a potvrdili prospěšnost typů, které fungují jako rozhraní, prozkoumáme ve zbytku kapitoly jmenný prostor System.Collections.

Kapitola 8 – Rozhraní pro zpětná volání, delegáti a události Účelem kapitoly 8 je demystifikovat pojem delegáta. Lapidárně řešeno – delegát .NET je nějaký objekt, který "ukazuje" na jiné metody ve vaší aplikaci. Budete-li se držet tohoto vzoru, budete moci budovat systémy, které budou umožňovat, aby se v obousměrné konverzaci angažovalo více objektů. Poté, co prozkoumáte, jak se používají delegáti .NET (včetně četných schopností přicházejících s verzí 2.0, jako jsou anonymní metody), seznámíte se s klíčovým slovem event C#, které zjednodušuje manipulace při programování se surovými delegáty.

Kapitola 9 – Pokročilé techniky C# pro sestrojování typů V této kapitole prohloubíte své vědomosti o programovacím jazyku C#, protože se seznámíte s řadou vyspělých programovacích technik. Dozvíte se například, jak se překrývají operátory, jak se


36 vytvářejí vlastní konverzní rutiny (implicitní i expicitní), a jak se budují indexery typů. Také se dozvíte, jak se uvnitř souboru *.cs manipuluje s ukazateli ve stylu C.

Kapitola 10 – Generika Od verze .NET 2.0 byl programovací jazyk C# rozšířen tak, že podporuje novou schopnost CTS, které se říká generika. Jak sami uvidíte, generické programování značně zvyšuje výkon aplikace i bezpečnost typů. V této kapitole nejenom probádáme různé generické typy nacházející se ve jmenném prostoru System.Collections.Generic, ale také se dozvíte, jak se budují vlastní generické metody a typy (s omezeními i bez nich).

Část III – Programování s assembly .NET Ve třetí části knihy se ponoříme do podrobností assembly .NET. Dozvíte se nejenom, jak se rozmisťují a konfigurují knihovny kódu .NET, ale začnete také chápat interní kompozici binární podoby .NET. V této části se vysvětluje nejenom účel atributů .NET, ale také sestrojování vícevláknových aplikací. V závěrečných kapitolách této třetí části knihy se prozkoumávají některé nízkoúrovňové detaily (jako je kontext objektu), syntaxe, a sémantika CIL.

Kapitola 11 – Úvod do assembly .NET Na velmi vysoké úrovni je assembly termín, jímž se myslí nějaký řízený (managed) soubor *.dll nebo *.exe. Assembly .NET však vyjadřují něco mnohem bohatěji vybaveného. Zde se dozvíte, jaký je rozdíl mezi assembly, která je tvořena jediným souborem a assembly, která se skládá z několika souborů. Dozvíte se také, jak se vybuduje a rozmístí každá z obou entit. Dále prozkoumáte, jak se dají pomocí souborů *.config založených na XML a assembly politiky vydavatele nakonfigurovat privátní a sdílené assembly. Nakonec prozkoumáte interní strukturu globální cache assembly (Global Assembly Cache, GAC) a účel konfigurační utility .NET Frameworku 2.0.

Kapitola 12 – Reflexe typu, pozdní vázání a programování založené na atributech V kapitole 12 budeme pokračovat v prozkoumávání assembly .NET. Podíváme se na proces odhalování typů při běhu, což se dělá přes typy obsažené ve jmenném prostoru System.Reflection. Pomocí těchto typů můžete budovat takové aplikace, které dokáží číst metadata assembly za pochodu. Dozvíte se, jak se pomocí pozdního vázání dynamicky aktivují typy za běhu (a jak se s nimi manipuluje). Závěrečným tématem této kapitoly bude průzkum účelu atributů .NET. Abychom prakticky předvedli užitečnost probraných témat, zakončíme tuto kapitolu vytvořením rozšiřitelné formulářové aplikace Windows.

Kapitola 13 – Procesy, aplikační domény, kontexty a hostitelé CLR Když už máte solidní vědomosti ohledně assembly, v této kapitole se o něco hlouběji ponoříte do kompozice načteného spustitelného souboru .NET. Prvním naším cílem bude ilustrovat, jaký je


37 vztah mezi procesy, aplikačními doménami a hranicemi kontextů. Až tyto termíny řádně vysvětlíme, budete rozumět tomu, jak operační systém Windows hostuje samotný CLR. Budete také lépe chápat, k čemu slouží mscoree.dll. Informace předložené v této kapitole vám poslouží jako perfektní náběh do kapitoly 14.

Kapitola 14 – Budování vícevláknových aplikací V této kapitole prozkoumáte, jak se budují vícevláknové aplikace. Popisuje se zde řada technik, které se dají použít, chcete-li vytvářet kód, který bude bezpečný vzhledem k vláknům. Kapitolu zahájíme tím, že opět navštívíme delegáty .NET, abychom lépe pochopili interně zabudovanou podporu delegátů pro asynchronní vyvolávání metod. Pak budeme prozkoumávat typy nacházející se uvnitř jmenného prostoru System.Threading. Společně se podíváme na mnoho typů (Thread, ThreadStart atd.), které umožňují snadno vytvářet dodatečná vykonávací vlákna.

Kapitola 15 – CIL a účel dynamických assembly Tato kapitola má dva cíle. V první polovině prozkoumáme syntaxi a sémantiku CIL do mnohem větších detailů než v předchozích kapitolách. Ve zbytku kapitoly probereme roli jmenného prostoru System.Reflection.Emit. S využitím jeho typů budete schopni budovat takový software, který bude umět při běhu generovat assembly .NET v paměti. Formálně řečeno – assembly, které se definují a vykonávají v paměti, se nazývají jako dynamické assembly.

Část IV – Programování s knihovnami .NET V tomto místě knihy už byste měli mít zvládnuté solidní základy jazyka C# i podrobnosti formátu assembly .NET. V této čtvrté části (kde si osvojíte úplně nové pole znalostí) začnete prozkoumáním několika jmenných prostorů z knihoven základních tříd. Pak se budeme věnovat vstupním a výstupním operacím se soubory, vývoji formulářů Windows či vrstvě .NET remoting. Nakonec si popíšeme přístup k databázím pomocí ADO.NET.

Kapitola 16 – Jmenný prostor System.IO Jak se dá uhádnout z jeho názvu, jmenný prostor System.IO umožňuje interakce se strukturou souborů a adresářů nějakého stroje. V průběhu této kapitoly se např. dozvíte, jak se programátorsky vytvoří (a odstraní) systém adresářů. Dozvíte se také, jak se přesouvají data do různých proudů a z nich ven (jedná o proudy založené na souborech, řetězcích, paměti atd.).

Kapitola 17 – Serializace objektů V této sedmnácté kapitole prozkoumáte služby platformy .NET pro serializaci objektů. Pokud to řekneme jednoduše, serializace umožňuje zachovat stav objektu (nebo sady objektů, které mají mezi sebou nějaký vztah) do nějakého proudu pro potřeby pozdějšího využití. Deserializace (jak asi očekáváte) je proces, při kterém se objekt vytvoří z proudu v paměti pro potřeby aplikace. Poté,


38 co zvládnete nezbytné základy, se dozvíte, jak se dá proces serializace přizpůsobit prostřednictvím rozhraní ISerializable a pomocí sady nových atributů přicházejících s .NET 2.0.

Kapitola 18 – Vrstva .NET remoting Navzdory všeobecně rozšířenému názoru nejsou webové služby XML jediným způsobem, jak se dají pod platformou .NET budovat distribuované aplikace. Zde se dozvíte více informací o vrstvě .NET remoting. Uvidíte, že CLR podporuje jistou schopnost, s jejíž pomocí se dají snadno předávat objekty přes hranice aplikací a strojů. Sématicky se jedná o dirigování hodnotou (Marshal-By-Balue, MBV ) a dirigování odkazem (Marshal-By-Reference, MBR). V průběhu prací se také dozvíte, jak se dá deklarativně měnit chování při běhu distribuované aplikace .NET pomocí konfiguračních souborů XML.

Kapitola 19 – Lepší okna se System.Windows.Forms V této kapitole začnete s průzkumem jmenného prostoru System.Windows.Forms. Zde se dozvíte podrobnosti o tom, jak se budují tradiční desktopové aplikace s grafickým uživatelským rozhraním (GUI), které podporuje menu, panely nástrojů a stavové řádky. A jak doufáte, v této kapitole probereme nejenom různé aspekty Visual Studia 2005 pro práci v době designu, ale také typy formulářů Windows v .NET 2.0 (MenuStrip, ToolStrip atd.).

Kapitola 20 – Realizace grafických dat s GDI+ V této kapitole se probírá, jak se v prostředí formulářů Windows dynamicky realizují grafická data. Kromě toho, že si popíšeme, jak se manipuluje s písmy, barvami, geometrickými obrázky a se soubory obrázků, prozkoumáme také, jak se zachytávají kliknutí kurzorem myši v dané oblasti (tzv. hit testing). Nezapomeneme také na techniky přetahování kurzorem myši, které jsou založeny na GUI. Nakonec se budeme věnovat novému formátu pro prostředky .NET, který je založen na reprezentaci dat XML.

Kapitola 21 – Programování s ovládacími prvky formulárů Windows V poslední z kapitol, které se soustřeďují na aplikace Windows, prozkoumáme různé prvky grafického uživatelského rozhraní, které se dodávají s .NET Frameworkem 2.0. Dozvíte se nejenom, jak pracovat s všelijakými ovládacími prvky formulářů Windows, dozvíte se také více informací o vyvíjení dialogových oken a dědění formulářů. Kromě toho v této kapitole také prozkoumáme, jak se budují vlastní ovládací prvky formulářů Windows, které se integrují do IDE.

Kapitola 22 – Přístup k databázím s ADO.NET ADO.NET je API platformy .NET pro přístup k datům. Jak uvidíte, budete s to komunikovat s typy ADO.NET pomocí připojené i odpojené vrstvy. V průběhu kapitoly dostanete šanci pracovat s oběma režimy ADO.NET a dozvíte se o několika nových tématech ADO.NET v .NET 2.0 (model továrny poskytovatele dat, tvůrci připojovacích řetězců a synchronní databázový přístup).


39

Část V – Webové aplikace a webové služby XML Pátá část je zasvěcena tvorbě webových aplikací ASP.NET a webovým službám XML. Jak uvidíte v prvních dvou kapitolách této části, ASP.NET 2.0 je hodně velkou modernizací ASP.NET 1.x a zahrnuje různé nové parádičky.

Kapitola 23 – Webové stránky ASP.NET 2.0 a webové ovládací prvky Touto kapitolou začíná vaše studium webových technologií, které se na platformě .NET podporují pomocí ASP.NET. Jak uvidíte, skriptovací kód na straně serveru se nyní nahrazuje "opravdovými" objektově orientovanými jazyky (jako jsou C#, VB.NET atd.). Kapitola vás uvede do klíčových témat ASP.NET, mezi něž patří práce se soubory kódu v pozadí (nebo bez nich), role webových ovládacích prvků ASP.NET, ovládací prvky pro ověřování platnosti dat nebo také komunikace s novým modelem vzoru stránek (master page), který poskytuje ASP.NET 2.0.

Kapitola 24 – Webové aplikace ASP.NET 2.0 V této předposlední kapitole rozšíříte své aktuální vědomosti o ASP.NET tím, že prozkoumáte všelijaké způsoby, jimiž lze pod .NET zpracovávat správu stavu. Podobně jako je tomu u klasického ASP, i ASP.NET umožňuje snadno vytvářet cookies nebo proměnné na úrovni aplikace (nebo relace). ASP.NET však také zavádí novou techniku správy stavu: cache aplikace. Až se podíváte na několik způsobů pro správu stavu s ASP.NET, dozvíte se, jakou roli hraje základní třída System. HttpApplication (číhá uvnitř souboru Global.asax) a jak můžete pomocí souboru Web.config dynamicky měnit chování vaší webové aplikace při běhu.

Kapitola 25 – Webové služby XML V poslední kapitole této knihy prozkoumáte roli webových služeb XML v .NET. Řečeno prostě, webová služba je nějaká assembly, která se aktivuje pomocí standardních požadavků HTTP. Elegance tohoto přístupu spočívá v tom, že HTTP je jediným protokolem, který je univerzálně přijímán prakticky téměř všude, a proto je vynikající volbou pro budování distribuovaných systémů, které jsou nezávislé na platformách a jazycích. Budete si moci také vyzkoušet řadu obklopujících technologií (WSDL, SOAP a UDDI), které umožňují harmonickou komunikaci mezi webovou službou a externím klientem.


40

Sdělte nám svůj názor Jako čtenáři této knihy se stáváte těmi nejdůležitějšími kritiky a komentátory. Vážíme si vašeho názoru a chtěli bychom vědět, co děláme správně, co bychom mohli dělat lépe, ve kterých oblastech bychom měli publikovat a také vaše další podnětné myšlenky, o které jste ochotni se s námi podělit. Jako odborný redaktor Zoner Press vítám vaše názory. Můžete mi psát – poslat e-mail nebo dopis – a sdělit mi, co se vám v této knize líbilo nebo nelíbilo, stejně tak, co bychom měli udělat, aby naše další knihy byly lepší. Pokud mi napíšete, nezapomeňte prosím připojit název knihy, ISBN, jméno autora, vaše jméno, telefon, fax nebo e-mail. Pozorně zhodnotím vaše názory a poskytnu je autorovi a redaktorům, kteří pracovali na této knize. Prosím, vězte, že nemohu pomoci s technickými problémy, které se týkají obsahu knihy, a že díky velkému množství e-mailů, které dostávám, nemohu zaručit odpověď na každou zprávu. E-mail: miroslav.kucera@zoner.com nebo knihy@zoner.cz. Adresa: Zoner Press, ZONER software, s.r.o., Miroslav Kučera, Nové sady 18, 602 00 Brno.

Zdrojové soubory Zdrojové soubory k této knize je možné stáhnout na adrese http://www.zonerpress.cz/download/c_2005_a_platforma_net.zip (9,95 MB). Zdrojové soubory jsou rozděleny do samostatných adresářů podle kapitol. V knize, prosím, nepřehlédněte poznámky označené slovy ZDROJOVÝ KÓD, které vás informují o tom, že právě probíraný příklad v knize je možné načíst do Visual Studia 2005 pro účely dalšího zkoumání nebo jeho modifikace. Poznámky týkající se zdrojového kódu mají tuto podobu: ZDROJOVÝ KÓD Tohle je poznámka vztahující se k právě probíranému zdrojovému kódu, která vás odkáže na konkrétní adresář!

Zdrojový soubor s příkladem otevřete ve Visual Studiu 2005 jednoduše tak, že v patřičném podadresáři najdete a otevřete soubor řešení (*.sln).


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.