plik


ÿþIDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ C# i .NET SPIS TRERCI SPIS TRERCI Autor: Stephen C. Perry T³umaczenie: Miko³aj Szczepaniak (przedmowa, rozdz. KATALOG KSI¥¯EK KATALOG KSI¥¯EK 1  10), Tomasz Walczak (rozdz. 11  18, dod. A, B) ISBN: 83-246-0320-4 KATALOG ONLINE KATALOG ONLINE Tytu³ orygina³u: Core C# and .NET Format: B5, stron: 912 ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG Doskona³e xród³o wiedzy dla wszystkich programistów C# TWÓJ KOSZYK TWÓJ KOSZYK " Szczegó³owe omówienie C# i .NET w wersji 2.0 " Techniki tworzenia i zabezpieczania aplikacji oraz zarz¹dzania kodem DODAJ DO KOSZYKA DODAJ DO KOSZYKA xród³owym i wersjami " Dziesi¹tki przyk³adów i kodów xród³owych Platforma .NET i jêzyk C# spowodowa³y prawdziw¹ rewolucjê na rynku narzêdzi CENNIK I INFORMACJE CENNIK I INFORMACJE programistycznych. Wersja 2.0 przynios³a kilka interesuj¹cych rozwi¹zañ, w tym nowe typy danych, komponenty i klasy. Dodatkowe funkcje jêzyka C# pozwalaj¹ ZAMÓW INFORMACJE ZAMÓW INFORMACJE na przyspieszenie i usprawnienie procesu tworzenia aplikacji oraz jej wdra¿ania O NOWORCIACH O NOWORCIACH i rozwijania. Dziêki platformie .NET przygotowanie wydajnej, bezpiecznej i ³atwej do rozbudowy aplikacji sta³o siê znacznie prostsze i szybsze. ZAMÓW CENNIK ZAMÓW CENNIK Ksi¹¿ka  C# i .NET przedstawia mo¿liwoSci platformy .NET i napisanego specjalnie dla niej jêzyka C#. Opisuje elementy platformy, sk³adniê i mo¿liwoSci jêzyka C# oraz CZYTELNIA zagadnienia zwi¹zane z tworzeniem programów za pomoc¹ tych narzêdzi. Omawia CZYTELNIA zasady pisania aplikacji Window Forms i efektywne techniki stosowania klas FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE graficznych z biblioteki GDI+. Charakteryzuje tak¿e technologiê ADO.NET, metody korzystania z plików XML, przetwarzanie wielow¹tkowe oraz techniki tworzenia wydajnych aplikacji internetowych w technologii ASP.NET. Szczególn¹ uwagê poSwiêcono bezpieczeñstwu programów i danych oraz skalowaniu i lokalizacji oprogramowania. " Elementy platformy .NET " Podstawy jêzyka C# " Praca z klasami i obiektami w C# " Przetwarzanie tekstu oraz operacje wejScia i wyjScia " Tworzenie aplikacji Window Forms " Korzystanie z biblioteki GDI+ " Po³¹czenia z bazami danych za pomoc¹ ADO.NET Wydawnictwo Helion " Aplikacje wielow¹tkowe oraz rozproszone ul. Chopina 6 44-100 Gliwice " Tworzenie aplikacji internetowych tel. (32)230-98-63 JeSli chcesz napisaæ w C# aplikacjê dobrej jakoSci, siêgnij po tê ksi¹¿kê e-mail: helion@helion.pl O autorze ....................................................................................................................................................17 Podzikowania ...........................................................................................................................................18 SBowo wstpne ...........................................................................................................................................19 Przedmowa ................................................................................................................................................21 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET 25 RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# .................................................................... 27 1.1.Przegld skBadników platformy .NET ...................................................................... 28 Microsoft .NET i standardy CLI ............................................................................. 30 1.2. Wspólne [rodowisko uruchomieniowe (CLR) .......................................................... 32 Kompilacja kodu platformy .NET ........................................................................... 32 Wspólny system typów (CTS) ................................................................................ 34 Zestawy .NET ...................................................................................................... 36 1.3.Biblioteka klas platformy (FCL) ............................................................................. 41 1.4.Praca z platform .NET i zestawem narzdzi .NET Framework SDK .......................... 44 Aktualizowanie platformy .NET Framework ............................................................. 45 Narzdzia platformy .NET Framework .................................................................... 46 Ildasm.exe .......................................................................................................... 47 wincv.exe ........................................................................................................... 50 Narzdzie Framework Configuration ...................................................................... 50 1.5. Wyja[nienie dziaBania kompilatora C# ................................................................... 53 Lokalizowanie kompilatora ................................................................................... 53 Kompilowanie oprogramowania z poziomu wiersza poleceD ..................................... 54 1.6. Podsumowanie ................................................................................................... 57 1.7. Sprawdz, czego si nauczyBe[ .............................................................................. 57 RozdziaB 2. Podstawy jzyka C# ............................................................................................................. 59 2.1.Podstawowa struktura programu C# ...................................................................... 60 Ogólne uwagi odno[nie programowania w jzyku C# ............................................... 62 2.2.Typy proste ......................................................................................................... 65 decimal .............................................................................................................. 67 bool ................................................................................................................... 67 6 C# i .NET char ................................................................................................................... 67 byte, sbyte .......................................................................................................... 68 short, int, long .................................................................................................... 68 single i double .................................................................................................... 68 Konwertowanie BaDcuchów numerycznych za pomoc metod Parse() i TryParse() ....... 69 2.3. Operatory arytmetyczne, logiczne i warunkowe ........................................................ 69 Operatory arytmetyczne ........................................................................................ 69 Operatory warunkowe i relacyjne ........................................................................... 70 Instrukcje kontrolujce przepByw sterowania .......................................................... 71 if-else ................................................................................................................. 71 switch ................................................................................................................ 73 2.4. Ptle .................................................................................................................. 74 Ptla while .......................................................................................................... 74 Ptla do ............................................................................................................. 74 Ptla for ............................................................................................................. 75 Ptla foreach ...................................................................................................... 75 Kontrola przepBywu sterowania w ptlach .............................................................. 76 2.5. Dyrektywy preprocesora C# .................................................................................. 76 Kompilacja warunkowa ........................................................................................ 77 Dyrektywy diagnostyczne ...................................................................................... 79 Regiony (obszary) kodu ........................................................................................ 79 2.6. AaDcuchy znaków ................................................................................................ 79 StaBe BaDcuchowe ................................................................................................ 80 Operacje na BaDcuchach ....................................................................................... 81 2.7. Typy wyliczeniowe ................................................................................................ 84 Praca z typami wyliczeniowymi .............................................................................. 84 Metody klasy System.Enum ................................................................................. 85 Typy wyliczeniowe i flagi bitowe ............................................................................ 86 2.8. Tablice ............................................................................................................... 87 Deklarowanie i tworzenie tablic ............................................................................. 88 Stosowanie metod i wBa[ciwo[ci tablicy System.Array ............................................ 88 2.9. Typy referencyjne i warto[ciowe ............................................................................ 90 Klasy System.Object i System.ValueType .............................................................. 90 Techniki przydzielania pamici dla typów referencyjnych i typów warto[ciowych ........ 91 Technika pakowania ............................................................................................ 92 Podsumowanie ró|nic pomidzy typami warto[ciowymi a typami referencyjnymi ........ 94 2.10. Podsumowanie ................................................................................................... 95 2.11. Sprawdz, czego si nauczyBe[ .............................................................................. 95 RozdziaB 3. Projektowanie klas w jzyku C# ......................................................................................... 97 3.1.Wprowadzenie do klas jzyka C# .......................................................................... 98 3.2.Definiowanie klas ................................................................................................ 98 Atrybuty .............................................................................................................. 99 Modyfikatory dostpu ........................................................................................ 102 Modyfikatory abstract, sealed i static .................................................................. 102 Identyfikator klasy ............................................................................................. 103 Klasy bazowe, interfejsy i dziedziczenie ............................................................... 103 3.3.Przegld skBadowych klasy ................................................................................. 104 Modyfikatory dostpu do skBadowych .................................................................. 104 3.4.StaBe, pola i wBa[ciwo[ci .................................................................................... 104 StaBe ................................................................................................................ 106 Pola ................................................................................................................. 107 Spis tre[ci 7 WBa[ciwo[ci ...................................................................................................... 109 Indeksery ......................................................................................................... 111 3.5.Metody ............................................................................................................. 113 Modyfikatory metod ........................................................................................... 113 Przekazywanie parametrów ................................................................................. 118 3.6.Konstruktory ..................................................................................................... 120 Konstruktor instancji ......................................................................................... 120 Konstruktor prywatny ......................................................................................... 124 Konstruktor statyczny ........................................................................................ 125 3.7.Delegacje i zdarzenia ......................................................................................... 126 Delegacje ......................................................................................................... 127 ObsBuga zdarzeD z wykorzystaniem delegacji ........................................................ 129 3.8. Przeci|anie operatorów .................................................................................... 136 3.9.Interfejsy .......................................................................................................... 139 Tworzenie i stosowanie interfejsów niestandardowych .......................................... 139 Praca z interfejsami ........................................................................................... 142 3.10. Klasy uniwersalne ............................................................................................. 143 3.11. Struktury .......................................................................................................... 146 Definiowanie struktur ......................................................................................... 147 Stosowanie struktur z metodami i wBa[ciwo[ciami ............................................... 148 3.12. Struktury kontra klasy ....................................................................................... 149 Struktury s typami warto[ciowymi, klasy s typami referencyjnymi ....................... 149 W przeciwieDstwie do klas struktury nie mog by dziedziczone ............................ 150 Ogólne reguBy, które nale|y uwzgldnia, wybierajc pomidzy strukturami a klasami ....................................................... 150 3.13. Podsumowanie ................................................................................................. 151 3.14. Sprawdz, czego si nauczyBe[ ............................................................................ 151 RozdziaB 4. Praca z obiektami w jzyku C# ...........................................................................................155 4.1.Tworzenie obiektów ........................................................................................... 156 PrzykBad: Tworzenie obiektów za pomoc wielu klas fabrykujcych ......................... 158 4.2.ObsBuga wyjtków .............................................................................................. 159 Klasa System.Exception .................................................................................... 160 Pisanie kodu obsBugujcego wyjtki .................................................................... 160 PrzykBad: ObsBuga wspólnych wyjtków SystemException ...................................... 163 Tworzenie niestandardowych klas wyjtków ......................................................... 164 Wyjtki nieobsBugiwane ...................................................................................... 167 Wskazówki dotyczce obsBugi wyjtków ............................................................... 168 4.3. Implementowanie metod klasy System.Object w klasach niestandardowych ........... 170 Metoda ToString() jako narzdzie opisywania obiektów ......................................... 170 Metoda Equals() jako narzdzie porównywania obiektów ....................................... 172 Klonowanie jako sposób tworzenia kopii obiektów ................................................ 174 4.4.Praca z klasami i interfejsami kolekcji technologii .NET ........................................ 176 Interfejsy kolekcji .............................................................................................. 176 PrzestrzeD nazw System.Collections ................................................................... 185 Klasy Stack i Queue .......................................................................................... 185 Klasa ArrayList .................................................................................................. 187 Klasa Hashtable ............................................................................................... 188 PrzestrzeD nazw System.Collections.Generic ....................................................... 191 4.5.Serializacja obiektów ......................................................................................... 195 Serializacja binarna ........................................................................................... 195 8 C# i .NET 4.6. Zarzdzanie cyklem |ycia obiektów ..................................................................... 199 Odzyskiwanie pamici w technologii .NET ............................................................ 199 4.7.Podsumowanie .................................................................................................. 205 4.8.Sprawdz, czego si nauczyBe[ ............................................................................. 205 Cz[ II Tworzenie aplikacji z wykorzystaniem biblioteki klas platformy .NET Framework 207 RozdziaB 5. Przetwarzanie tekstu i plikowe operacje wej[cia-wyj[cia w jzyku C# ......................209 5.1.Znaki i format Unicode ....................................................................................... 210 Format Unicode ................................................................................................. 211 Praca ze znakami .............................................................................................. 212 5.2.Klasa String ...................................................................................................... 215 Tworzenie BaDcuchów ......................................................................................... 216 Przegld operacji na BaDcuchach znakowych ........................................................ 218 5.3. Porównywanie BaDcuchów znakowych .................................................................. 219 Stosowanie metody String.Compare() ................................................................. 219 Stosowanie metody String.CompareOrdinal() ....................................................... 221 5.4. Przeszukiwanie, modyfikowanie i kodowanie zawarto[ci BaDcuchów ....................... 222 Przeszukiwanie zawarto[ci BaDcuchów ................................................................. 222 Przeszukiwanie BaDcuchów zawierajcych pary zastpcze ...................................... 222 PrzeksztaBcanie BaDcuchów ................................................................................. 223 Kodowanie BaDcuchów ....................................................................................... 225 5.5.Klasa StringBuilder ............................................................................................ 226 Przegld skBadowych klasy StringBuilder .............................................................. 227 Konkatenacja w klasie StringBuilder kontra tradycyjna konkatenacja BaDcuchów ..... 228 5.6. Formatowanie warto[ci liczbowych oraz daty i godziny .......................................... 229 Konstruowanie elementów formatowania ............................................................ 230 Formatowanie warto[ci liczbowych ...................................................................... 231 Formatowanie daty i godziny ............................................................................... 231 5.7.Wyra|enia regularne .......................................................................................... 236 Klasa Regex ..................................................................................................... 237 Tworzenie wyra|eD regularnych ........................................................................... 242 PrzykBad dopasowywania wzorca do BaDcucha ...................................................... 242 Praca z grupami ................................................................................................ 245 PrzykBady stosowania wyra|eD regularnych ........................................................... 247 5.8. PrzestrzeD nazw System.IO  klasy obsBugujce odczytywanie i zapisywanie strumieni danych ............................................................................................... 248 Klasa Stream .................................................................................................... 249 Klasa FileStream ............................................................................................... 249 Klasa MemoryStream ........................................................................................ 251 Klasa BufferedStream ....................................................................................... 252 Stosowanie klas StreamReader i StreamWriter odpowiednio do odczytywania i zapisywania wierszy tekstu ............................................................................. 253 Klasy StringWriter i StringReader ........................................................................ 255 Szyfrowanie danych za pomoc klasy CryptoStream ............................................. 256 5.9.PrzestrzeD nazw System.IO  katalogi i pliki ....................................................... 259 Klasa FileSystemInfo ......................................................................................... 259 Praca z katalogami za pomoc klas DirectoryInfo, Directory oraz Path .................... 260 Praca z plikami za pomoc klas FileInfo i File ....................................................... 263 5.10. Podsumowanie ................................................................................................. 265 5.11. Sprawdz, czego si nauczyBe[ ............................................................................ 266 Spis tre[ci 9 RozdziaB 6. Budowanie aplikacji Windows Forms .................................................................................269 6.1.Programowanie aplikacji Windows Forms ............................................................. 270 Rczne konstruowanie aplikacji Windows Forms .................................................. 271 6.2. Klasy kontrolek przestrzeni nazw Windows.Forms ................................................ 274 Klasa Control .................................................................................................... 274 Praca z kontrolkami ........................................................................................... 276 Zdarzenia zwizane z kontrolkami ....................................................................... 281 6.3.Klasa Form ....................................................................................................... 286 Konfigurowanie wygldu formularza ..................................................................... 288 Ustawianie poBo|enia i rozmiaru formularza ......................................................... 291 Wy[wietlanie formularzy ..................................................................................... 292 Cykl |ycia formularza niemodalnego .................................................................... 293 Wzajemne oddziaBywanie formularzy  przykBad prostej aplikacji ........................... 295 Formularz wBa[ciciela i formularze wBasno[ci ....................................................... 298 Okna komunikatów i okna dialogowe ................................................................... 300 Formularze MDI ................................................................................................. 302 6.4.Praca z menu .................................................................................................... 306 WBa[ciwo[ci klasy MenuItem .............................................................................. 306 Menu kontekstowe ............................................................................................ 307 6.5. Dodawanie pomocy do formularza ...................................................................... 308 Podpowiedzi ...................................................................................................... 309 ObsBuga zdarzeD naci[nicia klawisza F1 i kliknicia przycisku Pomoc ................... 310 Komponent HelpProvider .................................................................................... 312 6.6.Dziedziczenie formularzy .................................................................................... 313 Konstruowanie i korzystanie z bibliotek formularzy ............................................... 313 Korzystanie z formularzy potomnych .................................................................... 314 6.7.Podsumowanie .................................................................................................. 315 6.8.Sprawdz, czego si nauczyBe[ ............................................................................. 316 RozdziaB 7. Kontrolki formularzy Windows Forms ...............................................................................317 7.1. Przegld dostpnych w technologii .NET kontrolek formularzy Windows Forms ........ 318 7.2.Klasy przycisków, grup kontrolek, paneli i etykiet ................................................. 321 Klasa Button ..................................................................................................... 321 Klasa CheckBox ................................................................................................ 323 Klasa RadioButton ............................................................................................ 324 Klasa GroupBox ................................................................................................ 325 Klasa Panel ...................................................................................................... 326 Klasa Label ...................................................................................................... 328 7.3. Kontrolki PictureBox i TextBox ............................................................................ 329 Klasa PictureBox ............................................................................................... 329 Klasa TextBox ................................................................................................... 331 7.4. Klasy ListBox, CheckedListBox i ComboBox ......................................................... 333 Klasa ListBox .................................................................................................... 333 PozostaBe kontrolki list: ComboBox i CheckedListBox ........................................... 338 7.5.Klasy ListView i TreeView ................................................................................... 339 Klasa ListView .................................................................................................. 339 Klasa TreeView ................................................................................................. 346 7.6.Klasy ProgressBar, Timer i StatusStrip ................................................................ 351 Konstruowanie obiektów kontrolek StatusStrip .................................................... 351 7.7. Konstruowanie kontrolek niestandardowych ........................................................ 353 Rozbudowa istniejcej kontrolki .......................................................................... 354 Budowa niestandardowej kontrolki u|ytkownika ................................................... 354 10 C# i .NET PrzykBad kontrolki UserControl ............................................................................ 355 Stosowanie niestandardowych kontrolek u|ytkownika ........................................... 356 Praca z kontrolkami u|ytkownika na etapie projektowania aplikacji ........................ 357 7.8. Stosowanie techniki przecigania i upuszczania w kontrolkach formularzy WinForms ................................................................... 358 Wprowadzenie do techniki przecigania i upuszczania .......................................... 358 7.9.Korzystanie z zasobów ....................................................................................... 364 Praca z plikami zasobów .................................................................................... 364 Stosowanie plików zasobów w procesie tworzenia formularzy obsBugujcych wiele jzyków .................................................................................................. 368 7.10. Podsumowanie ................................................................................................. 371 7.11. Sprawdz, czego si nauczyBe[ ............................................................................ 371 RozdziaB 8. Elementy graficzne biblioteki GDI+ w technologii .NET ......................................................373 8.1.Przegld biblioteki GDI+ ..................................................................................... 374 Klasa Graphics ................................................................................................. 375 Zdarzenie Paint ................................................................................................. 379 8.2.U|ywanie obiektów klasy Graphics ...................................................................... 382 Podstawowe operacje grafiki dwuwymiarowej ....................................................... 383 Pióra ................................................................................................................ 387 Pdzle .............................................................................................................. 389 Kolory .............................................................................................................. 393 PrzykBadowy projekt: budowa przegldarki kolorów ............................................... 396 8.3.Obrazy .............................................................................................................. 400 Wczytywanie i zapisywanie obrazów .................................................................... 400 Operacje na obrazach ........................................................................................ 403 PrzykBadowy projekt: praca z obrazami ................................................................. 406 Uwaga odno[nie biblioteki GDI i BitBlt dla platformy Microsoft Windows ................ 412 8.4.Podsumowanie .................................................................................................. 413 8.5.Sprawdz, czego si nauczyBe[ ............................................................................. 414 RozdziaB 9. Czcionki, tekst i techniki drukowania .................................................................................417 9.1.Czcionki ........................................................................................................... 418 Rodziny czcionek ............................................................................................... 419 Klasa Font ........................................................................................................ 420 9.2. Rysowanie BaDcuchów tekstowych ....................................................................... 424 Rysowanie tekstu wielowierszowego ................................................................... 424 Formatowanie BaDcuchów za pomoc klasy StringFormat ...................................... 425 Stosowanie pozycji tabulacyjnych ........................................................................ 425 Przycinanie, wyrównywanie i zawijanie BaDcuchów ................................................. 428 9.3.Drukowanie ....................................................................................................... 429 Wprowadzenie ................................................................................................... 430 Klasa PrintDocument ......................................................................................... 431 Ustawienia drukarki ........................................................................................... 431 Ustawienia strony .............................................................................................. 434 Zdarzenia PrintDocument ................................................................................... 435 Zdarzenie PrintPage ........................................................................................... 437 Podgld raportu przeznaczonego do wydrukowania ............................................... 438 PrzykBad raportu ................................................................................................ 439 Tworzenie niestandardowych klas potomnych wzgldem klasy PrintDocument ........ 443 9.4.Podsumowanie .................................................................................................. 445 9.5.Sprawdz, czego si nauczyBe[ ............................................................................. 446 Spis tre[ci 11 RozdziaB 10. Praca z formatem XML w technologii .NET .......................................................................447 10.1. Praca z formatem XML ....................................................................................... 448 Tworzenie dokumentów XML za pomoc mechanizmu serializacji do formatu XML .. 449 Definicja schematu XML (XSD) ........................................................................... 452 Stosowanie arkuszy stylów XML .......................................................................... 454 10.2. Techniki odczytu danych w formacie XML ............................................................ 457 Klasa XmlReader ............................................................................................... 458 Klasa XmlNodeReader ....................................................................................... 463 Klasa XmlReaderSettings ................................................................................... 464 Weryfikacja danych XML z wykorzystaniem schematu XML .................................... 464 Opcje zwizane z odczytem danych XML .............................................................. 466 10.3. Techniki zapisywania danych w formacie XML ...................................................... 466 10.4. Przeszukiwanie kodu XML za pomoc instrukcji jzyka XPath ................................ 469 Konstruowanie zapytaD jzyka XPath ................................................................... 470 Klasa XmlDocument i instrukcje jzyka XPath ...................................................... 473 Klasa XPathDocument i instrukcje jzyka XPath ................................................... 473 Klasa XmlDataDocument i instrukcje jzyka XPath ............................................... 474 10.5. Podsumowanie .................................................................................................. 476 10.6. Sprawdz, czego si nauczyBe[ ............................................................................. 477 RozdziaB 11. ADO.NET ................................................................................................................................479 11.1. Architektura ADO.NET ........................................................................................ 480 Dostawca danych OLE DB w .NET ....................................................................... 481 Dostawca danych .NET ...................................................................................... 481 11.2. Modele dostpu do danych  poBczeniowy i bezpoBczeniowy ............................. 483 Model poBczeniowy .......................................................................................... 484 Model bezpoBczeniowy ..................................................................................... 485 11.3. Model poBczeniowy ADO.NET ............................................................................ 487 Klasy do obsBugi poBczenia ............................................................................... 487 Obiekt polecenia ............................................................................................... 490 Obiekt DataReader ............................................................................................ 494 11.4. Klasy DataSet, DataTable i model bezpoBczeniowy ............................................. 497 Klasa DataSet .................................................................................................. 497 Kolekcja DataTable ........................................................................................... 497 Aadowanie danych do obiektu DataSet ................................................................ 501 U|ywanie obiektu DataAdapter do aktualizacji bazy danych ................................... 503 Definiowanie relacji midzy tabelami w obiekcie DataSet ...................................... 506 Wybór midzy modelem poBczeniowym a bezpoBczeniowym ................................ 509 11.5. XML i ADO.NET ................................................................................................. 509 U|ywanie obiektów DataSet do tworzenia plików z danymi i szablonami XML .............. 510 Tworzenie szablonu obiektu DataSet na podstawie pliku XML ............................... 512 Wczytywanie danych XML do obiektu DataSet ...................................................... 512 11.6. Podsumowanie .................................................................................................. 515 11.7. Sprawdz, czego si nauczyBe[ ............................................................................. 515 RozdziaB 12. Wizanie danych z kontrolkami Windows Forms .............................................................517 12.1. Wprowadzenie do wizania danych ..................................................................... 518 Proste wizanie danych ...................................................................................... 518 ZBo|one wizanie danych z kontrolkami obsBugujcymi listy ................................... 520 Jednostronne i dwustronne wizanie danych ........................................................ 521 U|ycie mened|erów wizania .............................................................................. 523 12 C# i .NET 12.2. U|ywanie prostego i zBo|onego wizania danych w aplikacjach .............................. 526 Wizanie z obiektem DataTable .......................................................................... 526 Wizanie kontrolek z obiektem ArrayList .............................................................. 528 Dodawanie elementów do zródBa danych ............................................................. 530 Identyfikacja aktualizacji .................................................................................... 531 Aktualizacja oryginalnej bazy danych ................................................................... 532 12.3. Klasa DataGridView ........................................................................................... 532 WBa[ciwo[ci ...................................................................................................... 532 Zdarzenia ......................................................................................................... 539 Ustawianie relacji nadrzdna-szczegóBowa w kontrolkach DataGridView .................. 543 Tryb wirtualny .................................................................................................... 545 12.4. Podsumowanie .................................................................................................. 550 12.5. Sprawdz, czego si nauczyBe[ ............................................................................. 550 Cz[ III Zaawansowane techniki jezyka C# i platformy .NET 553 RozdziaB 13. Programowanie asynchroniczne i wielowtkowo[ ......................................................555 13.1. Czym jest wtek? .............................................................................................. 556 Wielowtkowo[ ................................................................................................ 556 13.2. Programowanie asynchroniczne .......................................................................... 559 Delegacje asynchroniczne .................................................................................. 560 PrzykBady implementacji wywoBaD asynchronicznych .............................................. 563 13.3. Bezpo[rednie u|ywanie wtków .......................................................................... 571 Tworzenie i u|ywanie wtków .............................................................................. 571 Praktyczne wykorzystanie wielowtkowo[ci .......................................................... 574 U|ywanie puli wtków ........................................................................................ 577 Klasy Timer ....................................................................................................... 578 13.4. Synchronizacja wtków ...................................................................................... 580 Atrybut Synchronization ...................................................................................... 582 Klasa Monitor ................................................................................................... 583 Muteksy ........................................................................................................... 584 Semafory .......................................................................................................... 585 Unikanie zakleszczenia ...................................................................................... 587 Podsumowanie technik synchronizacji ................................................................. 588 13.5. Podsumowanie .................................................................................................. 589 13.6. Sprawdz, czego si nauczyBe[ ............................................................................. 590 RozdziaB 14. Tworzenie aplikacji rozproszonych za pomoc technologii Remoting ..........................593 14.1. Domeny aplikacji ............................................................................................... 594 Zalety domen aplikacji ....................................................................................... 594 Domeny aplikacji i zestawy ................................................................................. 595 U|ywanie klasy AppDomain ................................................................................ 596 14.2. Zdalne korzystanie z obiektów ............................................................................ 598 Architektura technologii Remoting ....................................................................... 600 Rodzaje wywoBaD zdalnych .................................................................................. 603 Obiekty aktywowane przez klienta ....................................................................... 604 Obiekty aktywowane przez serwer ....................................................................... 605 Rejestracja typów .............................................................................................. 606 Zdalne wywoBania obiektów aktywowanych przez serwer ....................................... 609 Zdalne wywoBywanie obiektów aktywowanych przez klienta .................................... 616 Projektowanie aplikacji rozproszonych ................................................................. 621 Spis tre[ci 13 14.3. Dzier|awy i sponsorowanie ................................................................................. 622 Dzier|awa ......................................................................................................... 623 Sponsorowanie ................................................................................................. 626 14.4. Podsumowanie .................................................................................................. 628 14.5. Sprawdz, czego si nauczyBe[ ............................................................................. 628 RozdziaB 15. Usprawnianie kodu, bezpieczeDstwo i instalacja .............................................................631 15.1. Stosowanie standardów programowania platformy .NET ....................................... 633 U|ywanie FxCop ................................................................................................ 633 15.2. Zestawy z siln nazw ....................................................................................... 636 Tworzenie zestawów z siln nazw ...................................................................... 637 Podpisywanie opóznione .................................................................................... 638 Globalna pami podrczna zestawów (GAC) ....................................................... 639 Kontrola wersji .................................................................................................. 640 15.3. BezpieczeDstwo ................................................................................................ 641 Uprawnienia i zbiory uprawnieD ........................................................................... 642 Dowód .............................................................................................................. 646 Zasady bezpieczeDstwa ..................................................................................... 648 Konfigurowanie zasad bezpieczeDstwa ................................................................ 650 Narzdzie konfiguracyjne platformy .NET ............................................................. 651 Konfiguracja bezpieczeDstwa opartego na uprawnieniach kodu za pomoc narzdzia konfiguracyjnego  przykBad praktyczny ............................................................ 653 {danie uprawnieD dla zestawu .......................................................................... 657 Zabezpieczanie programowe ............................................................................... 660 15.4. Instalowanie aplikacji ........................................................................................ 667 Instalacja w systemie Windows  XCOPY a instalator Windows ............................ 667 Instalowanie zestawów w globalnej pamici podrcznej zestawów ......................... 668 Instalowanie zestawów prywatnych ..................................................................... 668 Konfigurowanie za pomoc elementu codeBase ................................................... 669 U|ywanie pliku konfiguracyjnego do zarzdzania ró|nymi wersjami zestawów .......... 670 Wersje zestawu i informacje o produkcie ............................................................. 670 15.5. Podsumowanie .................................................................................................. 671 15.6. Sprawdz, czego si nauczyBe[ ............................................................................. 672 Cz[ IV Programowanie aplikacji internetowych 675 RozdziaB 16. Formularze i kontrolki ASP.NET .........................................................................................677 16.1. Komunikacja klient-serwer poprzez poBczenie internetowe ................................... 678 PrzykBadowa aplikacja internetowa ...................................................................... 680 Kalkulator BMI w jzyku ASP.NET ........................................................................ 684 Model wykorzystujcy kod inline ......................................................................... 685 Model wykorzystujcy kod ukryty ......................................................................... 691 Kod ukryty i klasy cz[ciowe .............................................................................. 695 Klasa Page ....................................................................................................... 696 16.2. Kontrolki formularzy Web ................................................................................... 699 Przegld kontrolek Web ..................................................................................... 700 Okre[lanie wygldu kontrolek Web ...................................................................... 701 Proste kontrolki ................................................................................................. 701 Kontrolki do obsBugi list ..................................................................................... 706 Kontrolka DataList ............................................................................................ 708 14 C# i .NET 16.3. Wizanie danych oraz kontrolki do obsBugi zródeB danych ...................................... 711 Wizanie z obiektem DataReader ....................................................................... 711 Wizanie z obiektem DataSet ............................................................................. 712 Kontrolki do obsBugi zródeB danych ...................................................................... 714 16.4. Kontrolki walidacyjne ......................................................................................... 721 U|ywanie kontrolek walidacyjnych ....................................................................... 721 16.5. Strony gBówne i strony z tre[ci .......................................................................... 725 Tworzenie strony gBównej ................................................................................... 726 Tworzenie stron z tre[ci ................................................................................... 727 Dostp do strony gBównej ze stron z tre[ci ......................................................... 728 16.6. Tworzenie i u|ywanie niestandardowych kontrolek Web ........................................ 729 PrzykBadowa niestandardowa kontrolka ............................................................... 729 U|ywanie niestandardowych kontrolek ................................................................. 732 Zarzdzanie stanem kontrolki ............................................................................. 732 Kontrolki zBo|one ............................................................................................... 733 16.7. Wybór kontrolki Web do wy[wietlania danych ....................................................... 736 16.8. Podsumowanie .................................................................................................. 737 16.9. Sprawdz, czego si nauczyBe[ ............................................................................. 737 RozdziaB 17. Zrodowisko aplikacji ASP.NET ...........................................................................................739 17.1. Klasy HttpRequest i HttpResponse ..................................................................... 740 Obiekt HttpRequest ........................................................................................... 741 Obiekt HttpResponse ........................................................................................ 744 17.2. ASP.NET i pliki konfiguracyjne ............................................................................ 748 Zawarto[ pliku web.config ................................................................................ 749 Dodawanie niestandardowych elementów konfiguracyjnych ................................... 753 17.3. BezpieczeDstwo aplikacji ASP.NET ...................................................................... 756 Uwierzytelnianie przy u|yciu formularzy ................................................................ 757 PrzykBad zastosowania uwierzytelniania przy u|yciu formularzy ............................... 759 17.4. Przechowywanie stanu ....................................................................................... 763 Stan aplikacji .................................................................................................... 765 Stan sesji ......................................................................................................... 766 17.5. Pami podrczna ............................................................................................. 769 Umieszczanie w pamici podrcznej odpowiedzi ................................................... 769 Umieszczanie danych w pamici podrcznej ........................................................ 772 17.6. Tworzenie klienta u|ywajcego klas WebRequest i WebResponse ......................... 775 Klasy WebRequest i WebResponse ..................................................................... 775 PrzykBadowy klient internetowy ............................................................................ 775 17.7. Potoki HTTP ...................................................................................................... 777 Przetwarzania |dania w potoku ......................................................................... 778 Klasa HttpApplication ........................................................................................ 779 ModuBy HTTP ..................................................................................................... 782 Obiekty obsBugi HTTP ......................................................................................... 787 17.8. Podsumowanie .................................................................................................. 790 17.9. Sprawdz, czego si nauczyBe[ ............................................................................. 791 RozdziaB 18. UsBugi Web ..........................................................................................................................793 18.1. Wprowadzenie do usBug Web .............................................................................. 794 Wyszukiwanie i u|ywanie usBug Web .................................................................... 796 18.2. Tworzenie usBugi Web ........................................................................................ 798 Samodzielne tworzenie usBugi Web ..................................................................... 799 Tworzenie usBugi Web za pomoc [rodowiska VS.NET .......................................... 802 Rozszerzanie usBug Web za pomoc atrybutów WebService i WebMethod ............... 803 Spis tre[ci 15 18.3. Tworzenie klienta usBugi Web ............................................................................. 806 Tworzenie prostego klienta u|ywajcego klasy usBugi Web .................................... 807 Tworzenie po[rednika za pomoc [rodowiska Visual Studio .NET .......................... 814 18.4. Jzyk WSDL i protokóB SOAP ............................................................................... 815 Jzyk opisu usBug Web (WSDL) ........................................................................... 815 Prosty protokóB dostpu do obiektów (SOAP) ....................................................... 818 18.5. U|ywanie zBo|onych typów danych w usBugach Web .............................................. 825 UsBuga Web zwracajca rysunki .......................................................................... 825 U|ywanie usBug Web Amazonu ............................................................................ 827 Tworzenie po[rednika dla usBug Web Amazonu .................................................... 829 Tworzenie klienta usBugi Web za pomoc formularzy Windows ............................... 830 18.6. Wydajno[ usBug Web ........................................................................................ 832 Konfigurowanie poBczenia HTTP ........................................................................ 833 ObsBuga du|ych ilo[ci danych ............................................................................. 834 18.7. Podsumowanie .................................................................................................. 835 18.8. Sprawdz, czego si nauczyBe[ ............................................................................. 835 Dodatki 837 Dodatek A Elementy wprowadzone w .NET 2.0 i C# 2.0 .......................................................................839 Dodatek B Zdarzenia i delegacje kontrolki DataGridView ...................................................................843 Odpowiedzi do pytaD ...............................................................................................................................853 Skorowidz ...............................................................................................................................................869 RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 27 Zagadnienia omawiane w tym rozdziale: Przegld skBadników platformy .NET  architektura i najwa|niejsze cechy technologii .NET. Wspólne [rodowisko uruchomieniowe (CLR)  przegld zadaD wykonywanych przez cz[ uruchomieniow (wykonawcz) platformy .NET Framework, czyli funkcjonowania kompilatora  na bie|co (JIT), mechanizmów wczytywania zestawów oraz technik weryfikacji kodu. Wspólny system typów (CTS) i specyfikacja wspólnego jzyka (CLS)  mechanizmy wspólnego [rodowiska uruchomieniowego (CLR) w zakresie zapewniania zgodno[ci i mo|liwo[ci wspóBpracy jzyków programowania. Zestawy .NET  analiza struktury zestawów, filozofii tych zestawów oraz ró|nic pomidzy zestawami prywatnymi a zestawami wspóBdzielonymi. Biblioteka klas platformy (FCL)  biblioteka platformy .NET oferuje setki klas bazowych pogrupowane w ramach logicznych przestrzeni nazw. Narzdzia programowania  wraz z platform .NET otrzymujemy wiele narzdzi uBatwiajcych wytwarzanie kodu zródBowego. Mamy do dyspozycji midzy innymi narzdzie Ildasm do odwracania kompilacji kodu, WinCV do przegldania wBa[ciwo[ci klasy oraz narzdzie konfiguracyjne Framework Configuration. Kompilowanie i uruchamianie programów napisanych w jzyku C#  korzystanie z kompilatora jzyka programowania C# z poziomu wiersza poleceD wraz z omówieniem opcji decydujcych o strukturze kompilowanej aplikacji. Efektywne u|ywanie jzyka programowania wymaga czego[ wicej ni| dobrej znajomo[ci jego skBadni i oferowanych mechanizmów. W praktyce podczas poznawania najnowszych technologii coraz wiksz rol odgrywa dogBbne studiowanie samych [rodowisk progra- mowania. Nie wystarczy wic opanowanie do perfekcji samego jzyka C#  wydajny 28 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET i skuteczny programista czy architekt oprogramowania musi te| nabra biegBo[ci w korzy- staniu z odpowiednich bibliotek klas i narzdzi umo|liwiajcej zagBbianie si w te biblio- teki, diagnozowanie kodu oraz sprawdzanie faktycznej efektywno[ci stosowanych konstrukcji programistycznych. Celem tego rozdziaBu jest u[wiadomienie Czytelnikom istnienia najwa|niejszych rozwizaD oferowanych w ramach [rodowiska .NET, zanim jeszcze przystpi do nauki skBadni i se- mantyki jzyka programowania C#. Skupimy si przede wszystkim na tym, jak to [rodowi- sko (nie jzyk) wpBywa na sposób wytwarzania oprogramowania. Je[li nie masz do[wiad- czenia w korzystaniu z technologii .NET, powiniene[ uwa|nie przestudiowa kilka nowych koncepcji, które tam wprowadzono. .NET zmienia sposób my[lenia o dziedziczonym (czsto przestarzaBym) kodzie oraz kontroli wersji, zmienia sposób dysponowania zasobami pro- gramowymi, umo|liwia korzystanie z kodu napisanego w jednym z poziomu innego jzyka, upraszcza wdra|anie kodu, poniewa| eliminuje niepotrzebne zwizki z rejestrem systemo- wym, oraz tworzy samo-opisujcy metajzyk, który mo|e by wykorzystywany do okre[lania logiki programu w czasie jego wykonywania. Z ka|dym z tych elementów bdziesz miaB do czynienia na ró|nych etapach procesu wytwarzania oprogramowania i ka|dy z nich bdzie miaB wpByw na sposób projektowania i wdra|ania Twoich aplikacji. Z punktu widzenia programisty platforma .NET skBada si ze [rodowiska uruchomieniowego (wykonawczego) poBczonego z bibliotek klas bazowych. Organizacja tego rozdziaBu odpo- wiada wBa[nie takiemu postrzeganiu platformy .NET. RozdziaB zawiera dwa osobne podroz- dziaBy po[wicone odpowiednio wspólnemu [rodowisku uruchomieniowemu (ang. Common Language Runtime  CLR) oraz bibliotece klas platformy (ang. Framework Class Library  FCL). W dalszej cz[ci tego rozdziaBu zostan przedstawione podstawowe narzdzia, dziki którym programista mo|e nie tylko w sposób wrcz intuicyjny realizowa pewne za- dania w procesie wytwarzaniem oprogramowania dla platformy .NET, ale te| zarzdza i dys- trybuowa aplikacje. W ostatnim podrozdziale, swoistym preludium rozdziaBu 2., Czytelnik zostanie wprowadzony w [wiat kompilatora C# wraz z kilkoma przykBadami praktycznych zastosowaD. Platform .NET zaprojektowano jako zintegrowane [rodowisko, które w zaBo|eniu ma umo|- liwia bezproblemowe wytwarzanie i uruchamianie aplikacji internetowych, aplikacji ba- zujcych na Windows Forms, a nawet aplikacji dla urzdzeD mobilnych (z wykorzystaniem platformy Compact Framework). Na poni|szej li[cie wymieniono podstawowe cele, jakie po- stawili sobie twórcy tej platformy: Zapewnienie logicznie spójnego, obiektowego [rodowiska dla rozmaitych aplikacji. Zapewnienie [rodowiska, które pozwoli zminimalizowa konflikty wersji (popularnie nazywane  piekBem DLL ), które przez wiele lat prze[ladowaBy programistów Windows (COM) i  tym samym  upro[ci proces dystrybucji (instalacji) kodu. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 29 Zapewnienie przeno[nego [rodowiska, które bdzie bazowaBo na certyfikowanych standardach i które bdzie dawaBo mo|liwo[ zarzdzania przez dowolny system operacyjny. Ju| teraz jzyk programowania C# i podstawowy skBadnik [rodowiska uruchomieniowego technologii .NET, infrastruktura wspólnego jzyka (ang. Common Language Infrastructure  CLI), s objte odpowiednimi standardami ECMA1. Zapewnienie [rodowiska zarzdzanego, w którym weryfikacja kodu pod ktem bezpieczeDstwa wykonywania bdzie mo|liwie prosta. Aby zrealizowa te ambitne cele, projektanci platformy .NET Framework opracowali do[ specyficzn architektur, która dzieli t platform na dwie cz[ci: wspólne [rodowisko uru- chomieniowe (CLR) oraz bibliotek klas platformy (FCL). Na rysunku 1.1 przedstawiono gra- ficzn reprezentacj zastosowanego podej[cia. Rysunek 1.1. Platforma .NET Zrodowisko uruchomieniowe CLR, czyli opracowana przez firm Microsoft implementacja standardu CLI, obsBuguje wykonywanie kodu i wszystkie zwizane z tym zadania, czyli kom- pilacj, zarzdzanie pamici, zapewnianie bezpieczeDstwa, zarzdzanie wtkami oraz wymu- szanie bezpieczeDstwa typów. O kodzie wykonywanym we wspólnym [rodowisku urucho- mieniowym (CLR) mówimy, |e jest kodem zarzdzanym. Stosowanie tej terminologii pozwala odró|ni taki kod od kodu  niezarzdzanego , który nie implementuje wymagaD zwizanych z funkcjonowaniem w [rodowisku CLR, czyli np. od obiektów COM czy komponentów ba- zujcych na interfejsie programowym Windows API. Inny wa|ny skBadnik technologii .NET, biblioteka klas platformy (FCL), jest  jak sama nazwa wskazuje  bibliotek kodu wielokrotnego u|ytku definiujc typy (klasy, struktury itp.), które s udostpniane aplikacjom wykonywanym w [rodowisku uruchomieniowym platformy .NET. Zgodnie z tym, co przedstawiono na rysunku 1.1, biblioteka FCL obejmuje klasy obsBugujce dostp do bazy danych, operacje graficzne, interakcj z kodem niezarz- dzanym, bezpieczeDstwo oraz obsBug interfejsów u|ytkownika w postaci stron WWW i for- mularzy Windows Forms. Okazuje si, |e z tej jednej biblioteki klas korzystaj wszystkie j- zyki przygotowane do wspóBpracy z platform .NET Framework. Oznacza to, |e po zdobyciu do[wiadczenia w pracy ze wspomnianymi typami bdziemy mogli stosowa nasz wiedz, piszc kod w dowolnych jzykach programowania technologii .NET. 1 W niniejszej ksi|ce we wszystkich odwoBaniach do organizacji ECMA International (nazywanej dawniej European Computer Manufacturers Association) dla uproszczenia bdziemy si posBugiwali samym skrótem ECMA. 30 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Microsoft .NET i standardy CLI Naturalne pytanie stawiane przez programistów, którzy decyduj si zainwestowa swój czas w nauk jzyka programowania C# i mechanizmów platformy .NET, dotyczy tego, czy bd mogli wykorzystywa pozyskan wiedz tak|e na innych platformach. W szczególno[ci pro- grami[ci chc wiedzie, czy technologia .NET, jako produkt Microsoftu, jest [ci[le zwizana z systemem operacyjnym Windows czy mo|e jest przeno[n platform wytwarzania i wdra- |ania oprogramowania, któr bdzie mo|na implementowa dla konkurencyjnych systemów operacyjnych. Odpowiedz na to pytanie wymaga dobrego rozumienia relacji Bczcych tech- nologi Microsoft .NET, jzyk programowania C# oraz standardy infrastruktury wspólnego jzyka (CLI). Standard infrastruktury wspólnego jzyka (CLI) definiuje niezale|ne od platformy [rodowi- sko wykonywania wirtualnego kodu. CLI nie preferuje |adnego systemu operacyjnego, zatem mo|na go z powodzeniem stosowa zarówno w systemie Linux, jak i w Windows. Central- nym elementem tego standardu jest definicja wspólnego jzyka po[redniego (ang. Common Intermediate Language  CIL), który musi by generowany przez kompilatory zgodne ze standardem CLI, oraz system typów, który definiuje typy danych obsBugiwane przez wszyst- kie zgodne jzyki programowania. Jzyk po[redni jest kompilowany do jzyka wBa[ciwego dla docelowego systemu operacyjnego (patrz nastpny podrozdziaB). Infrastruktura wspólnego jzyka (CLI) obejmuje tak|e standardy dla samego jzyka C#, który zostaB stworzony i wypromowany przez firm Microsoft, i jako taki jest de facto standar- dowym jzykiem programowania dla platformy .NET. Warto jednak pamita, |e pozostali producenci szybko zainteresowali si standardem CLI i opracowali wBasne kompilatory dla takich jzyków jak Python, Pascal, Fortran, Cobol czy Eiffel .NET (przedstawiona lista oczy- wi[cie nie jest kompletna). Platforma .NET (patrz rysunek 1.1) jest w istocie implementacj standardów CLI zapropo- nowan przez firm Microsoft. Najwa|niejsz cech tej implementacji jest to, |e oferuje daleko bardziej rozbudowany zestaw rozwizaD i funkcji ni| ten zdefiniowany w standardo- wej infrastrukturze wspólnego jzyka. Aby si o tym przekona, wystarczy porówna przed- stawion wcze[niej struktur platformy .NET z architektur standardów CLI zaprezentowan na rysunku 1.2. Rysunek 1.2. Architektura zdefiniowana przez specyfikacje infrastruktury wspólnego jzyka (CLI) RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 31 Najkrócej mówic, infrastruktura wspólnego jzyka (CLI) definiuje dwie implementacje: implementacj minimaln, nazywan profilem jdra (ang. Kernel Profile), oraz implementacj bogatsz, nazywan profilem kompaktowym (ang. Compact Profile). Profil jdra zawiera typy i klasy niezbdne do pracy kompilatorów zgodnych ze standardem CLI. Biblioteka klas bazowych (ang. Base Class Library) zawiera nie tylko podstawowe klasy typów danych, ale tak|e klasy obsBugujce proste operacje dostpu do plików, definiujce atrybuty zabezpie- czeD oraz implementujce jednowymiarowe tablice. Profil kompaktowy wprowadza trzy do- datkowe biblioteki klas: bibliotek XML definiujc proste mechanizmy analizy skBadniowej jzyka XML, bibliotek Network obsBugujc protokóB HTTP i dostp do portów oraz bi- bliotek Reflection obsBugujc refleksje (mechanizm analizy programu przez samego siebie za po[rednictwem metadanych). Niniejsza publikacja byBaby du|o krótsza, gdyby zamiast implementacji zaproponowanej przez firm Microsoft opisywaBa wyBcznie zalecenia standardu CLI. Mogliby[my caBkowicie zre- zygnowa z rozdziaBów po[wiconych bibliotece ADO.NET (zawierajcej klasy obsBuguj- ce dostp do baz danych), bibliotece ASP.NET (zawierajcej klasy aplikacji internetowych) oraz bibliotece Windows Forms  co wicej, rozdziaBy po[wicone jzykowi XML byByby nieporównanie krótsze. Jak si zapewne domy[lasz, wymienione biblioteki s w jakim[ stop- niu uzale|nione od funkcjonalno[ci wykorzystywanego interfejsu Windows API. Twórcy tech- nologii .NET dodatkowo przewidzieli mo|liwo[ wywoBywania przez program interfejsu Win32 API za po[rednictwem mechanizmu nazwanego Interop. Oznacza to, |e programista .NET ma dostp nie tylko do interfejsu Win32 API, ale tak|e do ju| dziaBajcych aplikacji i komponentów (COM). Ten do[ szeroki most Bczcy technologi .NET z systemem Windows sprawia, |e imple- mentacja firmy Microsoft jest bardziej przezroczysta od [rodowisk wirtualnych  nie twier- dz przy tym, |e takie rozwizanie jest nieuzasadnione. Dziki temu programi[ci, którzy stawiaj pierwsze kroki, tworzc oprogramowania dla platformy .NET, mog  przynajmniej na pocztku  pisa aplikacje hybrydowe, czyli takie, które bd w sobie BczyBy kompo- nenty .NET z istniejcym kodem. Warto jednak pamita, |e budowa takich hybryd wyklucza mo|liwo[ przenoszenia kodu gotowego do innych systemów operacyjnych. Mam te| dobr wiadomo[ dla programistów, a wic tak|e Czytelników niniejszej ksi|ki  zaproponowane przez firm Microsoft dodatkowe mechanizmy wzbudziBy zainteresowa- nie szerszej spoBeczno[ci, która zaanga|owaBa si w opracowywanie implementacji CLI oferowanych z otwartym dostpem do kodu zródBowego. ZespoBowi realizujcemu jeden z czoBowych projektów tego typu, nazwanego Mono2, ju| teraz udaBo si zaimplemento- wa wikszo[ mechanizmów bibliotek ADO.NET i Windows Forms, wszystkie klasy ob- sBugujce jzyk XML oraz bogaty zbiór klas obsBugujcych kolekcje. Jest to o tyle wa|ne, |e wiedz i do[wiadczenie zdobyte podczas pracy z technologi Microsoft .NET bdzie mo|- na wykorzysta do implementowania podobnych rozwizaD dla takich platform jak Linux, BSD czy Solaris. Majc to na uwadze, spróbujmy teraz przeanalizowa najwa|niejsze cechy implementacji standardu CLI zaproponowanej przez firm Microsoft. 2 Patrz strona internetowa http://www.mono-project.com/Main_Page. 32 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Wspólne [rodowisko uruchomieniowe (CLR) zarzdza caBym cyklem |ycia aplikacji: loka- lizuje i kompiluje kod, wczytuje powizane klasy, zarzdza wykonywaniem aplikacji, a tak|e zapewnia automatyczne zarzdzanie pamici. Co wicej, [rodowisko CLR obsBuguje caB integracj jzyków programowania, czyli de facto odpowiada za bezproblemow wspóBpra- c kodu zapisanego w ró|nych jzykach i skompilowanego za pomoc ró|nych kompilato- rów. W niniejszym podrozdziale przyjrzymy si funkcjonowaniu wewntrznych mechani- zmów wspólnego [rodowiska uruchomieniowego, aby si przekona, jak opisane przed chwil cele faktycznie s realizowane. Nie bdzie to co prawda analiza szczegóBowa, ale z pewno[ci wystarczy do zapoznania si z terminologi, zaznajomienia z architektur niezale|n od j- zyków programowania i zrozumienia, co rzeczywi[cie si dzieje w momencie, w którym two- rzymy i uruchamiamy nasze programy. Rysunek 1.3. Funkcje wspólnego [rodowiska uruchomieniowego (CLR) Kompilacja kodu platformy .NET Kompilatory speBniajce wymagania wspólnego [rodowiska uruchomieniowego (CLR) ge- neruj kod wBa[nie dla docelowego [rodowiska uruchomieniowego (wykonawczego), a nie dla konkretnego procesora. Generowany w ten sposób kod, nazywany wspólnym jzy- kiem po[rednim (CIL), jzykiem po[rednim (IL) lub jzykiem po[rednim Microsoft (MSIL), w praktyce ma posta kodu maszynowego umieszczanego w plikach EXE lub DLL. Warto pamita, |e nie s to standardowe pliki wykonywalne, poniewa| dodatkowo wymagaj u|y- cia kompilatora na bie|co (ang. Just-in-Time, w skrócie JIT), który w czasie wykonywa- nia aplikacji dokona konwersji jzyka po[redniego na odpowiedni kod maszynowy. Poniewa| za zarzdzanie tym jzykiem po[rednim odpowiada wspólne [rodowisko uruchomieniowe, kod zapisany w tym jzyku jest nazywany kodem zarzdzanym (ang. managed code). Kod po[redni jest kluczem do speBnienia formalnego celu stawianego platformie .NET, czyli zgodno[ci ró|nych jzyków programowania. Zgodnie z tym, co przedstawiono na rysunku 1.3, wspólne [rodowisko uruchomieniowe (CLR) nie wie  bo nie musi wiedzie  w którym RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 33 jzyku napisano dan aplikacj. Zrodowisko CLR otrzymuje kod jzyka po[redniego (IL), który jest niezale|ny od stosowanych jzyków programowania. Poniewa| aplikacje komu- nikuj si midzy sob wBa[nie za po[rednictwem swojego kodu jzyka po[redniego, efekty pracy jednego kompilatora mog by integrowane z kodem wygenerowanym przez inny kompilator. Realizacja innego wa|nego celu technologii .NET, przeno[no[ci, jest mo|liwa dziki prze- niesieniu procesu tworzenia kodu maszynowego na poziom kompilatora JIT. Oznacza to, |e wygenerowany na jednej platformie kod jzyka po[redniego mo|e by wykonywany na innej platformie zawierajcej wBasn platform i kompilator JIT, który generuje kod maszynowy wBa[ciwy dla tej platformy. Poza generowaniem kodu jzyka po[redniego kompilatory speBniajce wymagania wspól- nego [rodowiska uruchomieniowego (CLR) dodatkowo musz generowa odpowiednie me- tadane w ka|dym module kodu. Metadane maj posta zbioru tabel, który zapewnia tym moduBom kodu niezwykle wa|n wBasno[ samoopisywania. Takie tabele zawieraj infor- macje o zestawie, pakiecie kodu (ang. assembly), do którego nale|y dany kod, oraz kompletny opis samego kodu. Reprezentowane w ten sposób informacje obejmuj midzy innymi dostp- ne typy, nazwy poszczególnych typów, skBadowe typów, atrybuty zasigu (widoczno[ci) typów oraz wszelkie inne cechy typów. Metadane maj wiele zastosowaD: Najwa|niejszym u|ytkownikiem metadanych jest kompilator JIT, który wydobywa z nich wszystkie informacje o typach niezbdne do przeprowadzenia procesu kompilacji. Kompilator wykorzystuje te informacje tak|e do weryfikacji kodu, aby mie pewno[, |e dany program wykonuje swoje operacje prawidBowo. PrzykBadowo, kompilator JIT sprawdza prawidBowo[ wywoBaD metod, porównujc wykorzystywane parametry wywoBaD z tymi, które zdefiniowano w metadanych odpowiednich metod. Metadane s wykorzystywane przez proces odpowiedzialny za odzyskiwanie (czyszczenie) pamici (ang. Garbage Collection), czyli podstawowy skBadnik platformy .NET w dziedzinie zarzdzania pamici. Proces GC (ang. Garbage Collector) u|ywa metadanych do okre[lania, kiedy pola w ramach danego obiektu odwoBuj si od innych pól i  tym samym  kiedy mo|na, a kiedy nie mo|na odzyska pamici zajmowanej przez te obiekty. Platforma .NET zawiera zbiór klas obsBugujcych funkcjonalno[ w zakresie odczytywania metadanych z wntrza programu. Tego rodzaju funkcjonalno[ nazywa si zbiorczo refleksj (ang. reflection). SiB tego rozwizania jest mo|liwo[ wykonywania przez program zapytaD odno[nie zawarto[ci metadanych i podejmowania wBa[ciwych decyzji w zale|no[ci od uzyskiwanych odpowiedzi. Podczas lektury dalszej cz[ci tej ksi|ki przekonasz si, |e wBa[nie refleksja jest kluczem do efektywnej pracy z niestandardowymi atrybutami, czyli obsBugiwanymi w jzyku C# konstrukcjami w zakresie dodawania do programów niestandardowych metadanych (metadanych u|ytkownika). WBa[nie jzyk po[redni (IL) i metadane decyduj o mo|liwo[ci wzajemnej wspóBpracy wielu jzyków programowania, jednak faktyczny sukces tego rozwizania zale|y od tego, czy wszystkie kompilatory .NET rzeczywi[cie bd obsBugiwaBy wspólny zbiór typów danych i specyfikacje jzyków. PrzykBadowo, dwa ró|ne jzyki nie mog by ze sob w peBni zgodne 34 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET na poziomie kodu IL, je[li jeden obsBuguje 32-bitowe liczby caBkowite ze znakiem, a drugi nie. Jzyki platformy .NET mog si od siebie ró|ni skBadniowo (np. typ int w jzyku C# odpowiada typowi Integer w jzyku Visual Basic), ale musi midzy nimi istnie zgodno[ bazowych typów reprezentowanych przez te czsto odmienne konstrukcje. Jak ju| wspomniano, standard infrastruktury wspólnego jzyka (CLI) definiuje formaln spe- cyfikacj typów, nazwan wspólnym systemem typów (ang. Common Type System  CTS), która jest integraln cz[ci wspólnego [rodowiska uruchomieniowego (CLR). System CTS definiuje nie tylko same typy, ale tak|e zachowania gwarantujce peBn zgodno[ ze [ro- dowiskiem CLR. Wspólny system typów (CTS) Wspólny system typów (CTS) zawiera bazowy zbiór typów danych dla ka|dego jzyka zgod- nego ze specyfikacj platformy .NET. CTS dodatkowo definiuje sposób deklarowania i two- rzenia typów niestandardowych oraz mechanizm zarzdzania cyklem |ycia instancji tych typów. Organizacj wspólnego systemu typów (CTS) przedstawiono na rysunku 1.4. Rysunek 1.4. Typy bazowe zdefiniowane przez wspólny system typów (CTS) Na postawie powy|szego rysunku mo|na wywnioskowa dwie rzeczy. Najbardziej oczywisty jest podziaB (kategoryzacja) typów na typy referencyjne (ang. reference types) i typy war- to[ciowe (ang. value types). Ten podstawowy podziaB ma zwizek ze sposobem skBadowa- nia typów i uzyskiwania dostpu do pamici, w której s przechowywane  w dostpie do typów referencyjnych wykorzystuje si specjalny obszar pamici, nazywany stert (ang. heap), i po[rednictwo wskazników; natomiast do typów warto[ciowych mo|na si odwoBywa bez- po[rednio, poniewa| s skBadowane na stosie programu. Drugim wa|nym wnioskiem pByn- cym z analizy rysunku 1.4 jest to, |e wszystkie typy  zarówno typy niestandardowe, jak i typy definiowane przez platform .NET  musz dziedziczy po jednym, predefiniowa- nym typie System.Object. Takie rozwizanie daje nam pewno[, |e wszystkie typy obsBuguj podstawowy zbiór dziedziczonych po tym typie bazowym metod i wBa[ciwo[ci. W technologii .NET pojcie  typu jest bardzo ogólne  mo|e si odnosi do klasy, struktury, typu wyliczeniowego, delegacji lub interfejsu. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 35 Kompilator zgodny ze specyfikacj wspólnego systemu typów (CTS) musi gwarantowa, |e jego typy bd prawidBowo obsBugiwane przez wspólne [rodowisko uruchomieniowe (CLR). Sama zgodno[ typu nie oznacza jeszcze, |e dany jzyk bdzie si mógB komunikowa z po- zostaBymi jzykami. Taka mo|liwo[ bdzie wymagaBa zgodno[ci z bardziej restrykcyjnym zbiorem specyfikacji wspólnego jzyka (ang. Common Language Specification  CLS), które definiuj podstawowe reguBy wspóBpracy jzyków programowania. Wspomniane spe- cyfikacje s w istocie minimalnym zestawem wymagaD, które musz by speBnione przez ka|dy kompilator zapewniajcy peBn zgodno[ ze [rodowiskiem CLR. W tabeli 1.1 przedstawiono wybrany zbiór reguB specyfikacji wspólnego jzyka (CLS), które dobrze ilustruj, jakiego rodzaju wBasno[ci nale|y uwzgldnia podczas tworzenia typów zgodnych z t specyfikacj (kompletn list mo|na znalez w dokumentacji zestawu narz- dzi .NET SDK). Tabela 1.1. Wybrane wBasno[ci i reguBy specyfikacji wspólnego jzyka (CLS) WBasno[ci ReguBa Widoczno[ (zasig) ReguBy widoczno[ci maj zastosowanie tylko dla tych skBadowych typu, które s udostpniane poza definiujcym je zestawem .NET. Znaki i wielko[ liter Aby dwie zmienne byBy traktowane jak osobne struktury, ich nazwy musz si ró|ni czym[ wicej ni| tylko wielko[ci liter. Typy podstawowe Wymienione podstawowe typy danych s zgodne ze specyfikacj wspólnego jzyka (CLS): Byte, Int16, Int32, Int64, Single, Double, Boolean, Char, Decimal, IntPtr oraz String. WywoBania konstruktorów Konstruktor musi wywoBa konstruktor klasy bazowej, zanim bdzie mógB uzyska dostp do któregokolwiek z jej pól. Granice tablic Dolna granica (najni|szy indeks) wszystkich wymiarów tablic jest zero (0). Typy wyliczeniowe Typem bazowym wykorzystywanym w typach wyliczeniowych musi by Byte, Int16, Int32 lub Int64. Sygnatury metod Typy wszystkich parametrów i zwracanych warto[ci wykorzystywanych w sygnaturach metod musz by zgodne ze specyfikacj wspólnego jzyka (CLS). Przedstawione reguBy s stosunkowo proste, ale te| do[ konkretne. Przyjrzyjmy si teraz fragmentowi kodu jzyka C#, aby lepiej zrozumie, jak opisane metody s stosowane w praktyce. public class Conversion { public double Metric( double inches) { return (2.54 * inches); } public double metric( double miles) { return (miles / 0.62); } } Nawet je[li nie masz do[wiadczenia w pracy z kodem jzyka C#, powiniene[ bez trudu wskaza miejsce, w którym przedstawiony kod narusza reguBy specyfikacji CLS. Zgodnie z drug reguB opisan w tabeli 1.1 nazwy konstrukcji jzykowych s uwa|ane za ró|ne, je- [li ró|ni si czym[ wicej ni| tylko wielko[ci znaków. Aatwo zauwa|y, |e nazwy metod 36 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Metric() i metric()Bami t reguB. Przedstawiony fragment kodu zostanie co prawda prawi- dBowo zinterpretowany przez kompilator jzyka C#, jednak ju| program napisany w jzyku Visual Basic.NET  który ignoruje wielko[ liter  nie mógBby odró|ni nazw obu metod. Zestawy .NET CaBy zarzdzany kod wykonywany na platformie .NET musi si znajdowa w specjalnych zestawach (nazywanych te| pakietami kodu lub moduBami .NET). Ka|dy taki zestaw lo- gicznie jest przetwarzany jako pojedynczy plik EXE lub DLL. Fizycznie zestaw .NET mo|e si jednak skBada z caBej kolekcji plików zawierajcych sam kod oraz niezbdne zasoby (np. obrazy lub dane w formacie XML). Zestaw jest tworzony w chwili, gdy kompilator zgodny ze specyfikacj .NET konwertuje plik zawierajcy kod zródBowy na odpowiedni plik DLL lub EXE. Jak wida na rysunku 1.5, zestaw skBada si z manifestu, metadanych oraz wygenerowanego przez kompilator jzy- ka po[redniego (IL). Poni|ej przyjrzymy si poszczególnym skBadnikom zestawów nieco dokBadniej. Rysunek 1.5. Zestaw .NET skBadajcy si z jednego pliku Manifest. Ka|dy zestaw .NET musi zawiera pojedynczy plik zawierajcy tzw. manifest. Manifest jest zbiorem tabel metadanych, które zawieraj listy nazw wszystkich plików w danym zestawie, referencje do zestawów zewntrznych oraz informacje umo|liwiajce identyfikacj danego zestawu (czyli np. nazw i numer wersji). Zestawy z silnymi nazwami (ang. strongly named assemblies  patrz dalsza cz[ tego rozdziaBu) dodatkowo zawieraj unikatowe sygnatury cyfrowe. Podczas wczytywania zestawu .NET [rodowisko CLR w pierwszej kolejno[ci otwiera wBa[nie plik zawierajcy manifest, aby mie mo|liwo[ identyfikacji pozostaBych skBadników danego zestawu. Metadane. Poza opisanymi przed chwil tabelami manifestu kompilator C# generuje jeszcze tabele definicji i referencji. Tabele definicji zawieraj kompletny opis typów stosowanych w kodzie jzyka po[redniego. PrzykBadowo, kompilator C# generuje tabele definiujce typy, metody, pola, parametry i wBa[ciwo[ci. Tabele referencji zawieraj informacje o wszystkich referencjach do typów i pozostaBych zestawów. Kompilator JIT wykorzystuje te tabele podczas konwertowania kodu jzyka po[redniego na rdzenny kod maszynowy. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 37 Jzyk po[redni. Rol kodu jzyka po[redniego (IL) omówili[my we wcze[niejszej cz[ci tego rozdziaBu. Zanim wspólne [rodowisko uruchomieniowe (CLR) bdzie mogBo u|y kodu tego jzyka, musimy ten kod umie[ci w zestawach (plikach EXE lub DLL). Warto pamita, |e wymienione rodzaje plików nie s identyczne  zestaw .NET w postaci pliku EXE musi definiowa  punkt wej[cia (ang. entry point), od którego rozpocznie si jego wykonywanie, natomiast plik DLL peBni funkcj biblioteki kodu zawierajcej definicje typów. Zestaw jest czym[ wicej ni| tylko logicznym sposobem upakowywania kodu wykonywal- nego. Zestawy s sercem zastosowanego w technologii .NET modelu rozmieszczania (wdra- |ania) kodu, kontroli wersji i zapewniania bezpieczeDstwa: CaBy zarzdzany kod, niezale|nie od tego, czy ma posta autonomicznego programu, kontrolki czy biblioteki DLL zawierajcej typy wielokrotnego u|ytku, jest umieszczany wBa[nie w zestawach. Zestaw .NET jest jednostk najbardziej atomow, któr mo|na wdro|y w systemie. Do uruchomienia aplikacji wymagane s tylko te zestawy, bez których nie mo|na przeprowadzi fazy inicjalizacji. PozostaBe zestawy s wczytywane na |danie (wedBug potrzeb). Do[wiadczeni programi[ci potrafi efektywnie wykorzystywa taki podziaB aplikacji  dziel kod pomidzy zestawy .NET w zale|no[ci od czstotliwo[ci jego wykorzystywania. W |argonie programistów technologii .NET zestaw wyznacza tzw. granic wersji (ang. version boundary). Pole wersji w manife[cie jest stosowane dla wszystkich typów i zasobów w danym zestawie. Oznacza to, |e wszystkie pliki skBadajce si na ten zestaw s traktowane jak ta sama jednostka, oznaczona t sam wersj. Dziki takiemu oddzieleniu warstwy fizycznych zestawów od logicznego podziaBu w technologii .NET istnieje mo|liwo[ wspóBu|ytkowania logicznych atrybutów przez wiele plików fizycznych. Ta wyjtkowa cecha odró|nia pliki zestawów od tradycyjnych, systemowych plików DLL. Zestaw wyznacza te| granic bezpieczeDstwa (ang. security boundary), od której zale| wszelkie uprawnienia dostpu. W jzyku C# stosuje si tzw. modyfikatory dostpu (ang. access modifiers), które kontroluj dostp do typów i skBadowych typów w ramach zestawów. Dwa takie modyfikatory s stosowane do wyznaczania granic bezpieczeDstwa w dostpie do zestawów: modyfikator public zezwala na nieograniczony dostp do zestawu .NET, natomiast modyfikator internal ogranicza ten dostp do typów i skBadowych nale|cych do tego samego zestawu. Jak ju| wspomniano, zestaw mo|e si skBada z wielu plików. Nie musz to by wyBcznie moduBy kodu  w skBad zestawu mog wchodzi tak|e pliki zasobów, w tym obrazy graficz- ne i pliki tekstowe. W typowych zastosowaniach tego rodzaju pliki maj na celu umo|liwie- nie aplikacji wykorzystywanie zasobów niezbdnych do prezentacji interfejsu u|ytkownika z uwzgldnieniem ustawieD kraju i jzyka docelowego u|ytkownika. Warto pamita, |e nie ma |adnych ograniczeD co do liczby plików w zestawie. Na rysunku 1.6 przedstawiono struk- tur wieloplikowego zestawu .NET. Przedstawiony diagram wieloplikowego zestawu pokazuje wyraznie, |e manifest zestawu za- wiera informacje identyfikujce wszystkie pliki wchodzce w skBad tego zestawu. 38 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Rysunek 1.6. Zestaw wieloplikowy Chocia| wikszo[ zestawów skBada si z pojedynczego pliku, istnieje przynajmniej kilka przypadków, w których lepszym rozwizaniem jest stosowanie zestawów wieloplikowych: Zestawy wieloplikowe umo|liwiaj Bczenie moduBów przygotowanych w ró|nych jzykach programowania. Programi[ci zaanga|owani w prace nad oprogramowaniem mog korzysta z jzyka Visual Basic.NET do bByskawicznego wytwarzania aplikacji (ang. Rapid Application Development  RAD) oraz z jzyka C# do budowy komponentów lub rozwizaD korporacyjnych. Kod stworzony w obu jzykach mo|e nie tylko wspóBistnie, ale te| efektywnie wspóBpracowa w ramach jednego zestawu .NET. ModuBy kodu mo|na podzieli w sposób pozwalajcy zoptymalizowa proces wczytywania kodu przez wspólne [rodowisko uruchomieniowe (CLR). Wzajemnie powizany i czsto wykorzystywany kod powinien si znalez w jednym module, natomiast kod, z którego korzystamy stosunkowo rzadko, powinien trafi do innego moduBu. Zrodowisko CLR nigdy nie wczytuje moduBów do momentu, w którym rzeczywi[cie bd potrzebne. Tworzc bibliotek klas, powiniene[ i[ krok dalej i pogrupowa komponenty wedBug cyklu |ycia, wersji i zabezpieczeD (by mo|e ró|nice w tych obszarach bd uzasadniaBy podziaB klas pomidzy wiele zestawów). Pliki zasobów mog tworzy wBasny moduB, który bdzie odseparowany od moduBów jzyka po[redniego (IL). Takie rozwizanie uBatwi korzystanie ze wspólnych zasobów przez wiele aplikacji. Wieloplikowe zestawy mo|na tworzy albo za pomoc kompilatora C# uruchamianego z po- ziomu wiersza poleceD, albo za pomoc narzdzia Bczcego zestawy .NET, czyli Assembly Linkera, Al.exe. W ostatnim podrozdziale tego rozdziaBu przedstawiono przykBad u|ycia do tego celu kompilatora jzyka C#. Warto pamita, |e w [rodowisku Visual Studio.NET 2005 tworzenie wieloplikowych zestawów nie jest obsBugiwane. Zestawy prywatne i wspóBdzielone Zestawy mog by wdra|ane na dwa sposoby: jako struktury prywatne lub struktury glo- balne. Zestawy znajdujce si w katalogu bazowym aplikacji lub w jego podkatalogach s nazywane zestawami wdra|anymi prywatnie lub po prostu zestawami prywatnymi (ang. privately deployed assemblies). Instalacja i aktualizacja zestawów prywatnych nie mogBaby RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 39 by Batwiejsza  zwykle wymaga tylko skopiowania zestawu do katalogu bazowego, na- zwanego AppBase, w którym znajduje si dana aplikacja. Nie s wymagane |adne zmiany w ustawieniach rejestru. Co wicej, istnieje mo|liwo[ dodania pliku konfiguracyjnego apli- kacji, który przykryje ustawienia zapisane w manife[cie i umo|liwi przenoszenie plików ze- stawów w ramach katalogu AppBase. Zestawy wspóBdzielone to takie, które s instalowane w lokalizacji globalnej, nazywanej glo- baln pamici podrczn zestawów (ang. Global Assembly Cache  GAC), skd s udo- stpniane wielu aplikacjom. Najwa|niejsz zalet globalnej pamici podrcznej zestawów jest mo|liwo[ równoczesnego korzystania z wielu wersji tych samych zestawów. WBa[ciwa realizacja tej koncepcji wymagaBa od twórców technologii .NET wyeliminowania problemu konfliktów nazw, który jest prawdziw plag w tradycyjnych bibliotekach DLL  zdecy- dowano si na u|ycie a| czterech ró|nych atrybutów identyfikujcych zestawy: nazwy pliku, ustawieD kulturowych (regionalnych), numeru wersji oraz tokenu klucza publicznego. Publiczne zestawy zwykle s skBadowane w katalogu assembly zlokalizowanym gdzie[ we- wntrz katalogu systemu operacyjnego (czyli np. wewntrz katalogu WINNT\ w przypadku systemu Microsoft Windows 2000). Na rysunku 1.7 przedstawiono zrzut ekranu, który do- brze ilustruje specjalny format wy[wietlania wszystkich czterech atrybutów (platforma .NET zawiera plik DLL, który rozszerza funkcjonalno[ Eksploratora Windows o mechanizmy prezentacji zawarto[ci pamici podrcznej GAC). Przyjrzyjmy si teraz ka|demu z tych czte- rech atrybutów. Rysunek 1.7. Fragment listy zestawów wchodzcych w skBad globalnego katalogu zestawów Nazwa zestawu. Nazywana tak|e przyjazn nazw (ang. friendly name), ma posta nazwy pliku bez rozszerzenia. Wersja. Ka|dy zestaw ma przypisany numer wersji, który jest stosowany dla wszystkich plików wchodzcych w skBad tego zestawu. Numer wersji skBada si z czterech liczb w nastpujcym formacie: <numer gBówny>.<numer dodatkowy>.<kompilacja>.<poprawka> GBówne i dodatkowe numery wersji zwykle s aktualizowane w przypadku wprowadzenia zmian, które zrywaj zgodno[ wstecz (z wcze[niejszymi wersjami). Numery wersji mo|na przypisywa do zestawów, doBczajc w ich kodzie zródBowym atrybut AssemblyVersion. 40 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Ustawienia regionalne. Zawarto[ zestawu mo|na przypisa do okre[lonej kultury lub jzyka. Istnieje specjalny, dwuliterowy kod, w którym "en" oznacza jzyk angielski, natomiast "fr" wskazuje na jzyk francuski  tego rodzaju kody mo|na przypisywa do zestawów, umieszczajc w kodzie zródBowym atrybut AssemblyCulture: [assembly: AssemblyCulture ("fr-CA")] Token klucza publicznego. Aby zapewni unikatowo[ i autentyczno[ wspóBdzielonych zestawów, [rodowisko .NET wymaga od ich twórców oznaczania zestawów za pomoc tzw. silnych nazw (ang. strong names). Proces przypisywania takich nazw, nazywany podpisywaniem zestawów (ang. signing), wymaga stosowania par kluczy publicznych i prywatnych. Kiedy kompilator buduje dany zestaw, wykorzystuje klucz prywatny do wygenerowania silnej nazwy. Klucz publiczny jest na tyle du|y, |e konieczne jest utworzenie specjalnego tokenu (reprezentacji symbolicznej) przez zakodowanie za pomoc funkcji mieszajcej caBego klucza i wybraniu tylko ostatnich o[miu bajtów. Tak utworzony token jest nastpnie umieszczany w manife[cie ka|dego zestawu klienckiego, który odwoBuje si do odpowiedniego zestawu wspóBdzielonego, i jest wykorzystywany do identyfikacji tego zestawu w czasie wykonywania. Zestaw .NET, który oznaczono (podpisano) za pomoc kluczy publicznego i prywatnego, jest okre[lany mianem zestawu z siln nazw lub silnie nazwanego zestawu. Wszystkie ze- stawy wspóBdzielone musz mie przypisane silne nazwy. Prekompilacja zestawu Po wczytaniu zestawu nale|y skompilowa kod jzyka po[redniego do postaci rdzennego ko- du maszynowego. Je[li masz ju| do[wiadczenie w pracy z plikami wykonywalnymi w for- macie kodu maszynowego, zapewne bdzie Ci interesowaBa wydajno[ tego rozwizania i ewentualnie mo|liwo[ tworzenia odpowiedników  plików wykonywalnych w [rodowi- sku .NET. Odpowiedz na drugie pytanie brzmi:  tak  technologia .NET przewiduje mo|li- wo[ prekompilowania zestawów. Platforma .NET Framework zawiera narzdzie generatora rdzennych obrazów (ang. Native Image Generator, Ngen), które umo|liwia kompilowanie zestawów do postaci  rdzennych obrazów skBadowanych w specjalnej pamici podrcznej  zarezerwowanym obszarze wspominanej ju| pamici podrcznej GAC. Za ka|dym razem, gdy wspólne [rodowisko uru- chomieniowe (CLR) wczytuje zestaw, przeszukuje t pami podrczn pod ktem ewentu- alnej dostpno[ci rdzennego obrazu; je[li znajdzie taki obraz, wczytuje wBa[nie prekompilowa- ny kod. Na pierwszy rzut oka wydaje si, |e takie rozwizanie jest korzystne pod wzgldem wydajno[ci. W rzeczywisto[ci opisana strategia ma jednak wiele powa|nych wad. Narzdzie Ngen tworzy obraz dla hipotetycznej architektury sprztowej, dziki czemu b- dzie go mo|na uruchomi np. na dowolnym komputerze z procesorem x86. ZupeBnie ina- czej dziaBa kompilator JIT w [rodowisku .NET, który dysponuje niezbdn wiedz o kom- puterze docelowym kompilacji i mo|e odpowiednio dostosowa podejmowane dziaBania RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 41 optymalizacyjne. Efekt jest taki, |e wersje generowane przez ten kompilator czsto przewy|- szaj pod wzgldem wydajno[ci prekompilowane zestawy. Kolejn wad rdzennych obra- zów jest ryzyko dezaktualizacji prekompilowanych zestawów wskutek zmian w konfigura- cji sprztowej lub w systemie operacyjnym, np. w wyniku zainstalowania aktualizacji. Dynamicznie kompilowane zestawy z reguBy s pod wzgldem wydajno[ci lepsze lub równe prekompilowanym plikom wykonywalnym wygenerowanym przez narzdzie Ngen. Weryfikacja kodu W ramach procesu kompilacji JIT wspólne [rodowisko uruchomieniowe (CLR) przepro- wadza dwa rodzaje weryfikacji: weryfikacj kodu jzyka po[redniego oraz test poprawno- [ci metadanych. Celem tych dziaBaD jest sprawdzenie, czy odpowiedni kod faktycznie gwa- rantuje bezpieczeDstwo typów (ang. type safety). W praktyce chodzi o upewnienie si, |e typy parametrów w metodzie wywoBujcej i metodzie wywoBywanej s ze sob zgodne oraz |e warto[ci zwracane przez dan metod s zawsze zgodne z typem zadeklarowanym w de- klaracji tej metody. Krótko mówic, wspólne [rodowisko uruchomieniowe (CLR) przeszu- kuje kod jzyka po[redniego (IL) pod ktem zgodno[ci warto[ci przypisywanych do zmien- nych z typami tych zmiennych; je[li zostanie wykryta niezgodno[ w tym zakresie, kompilacja JIT zakoDczy si wygenerowaniem stosownego wyjtku. Kod generowany przez kompilator C# domy[lnie zapewnia bezpieczeDstwo typów. Istnieje jednak sBowo kluczowe unsafe, za pomoc którego mo|emy na poziomie programu napi- sanego w tym jzyku osBabi restrykcje w zakresie dostpu do danych (wBcznie z do- puszczeniem mo|liwo[ci stosowania odwoBaD wykraczajcych poza granice tablic). Zalet takiej weryfikacji jest pewno[, |e wykonywanie danego kodu nie bdzie miaBo ne- gatywnego wpBywu na funkcjonowanie pozostaBych aplikacji wskutek uzyskiwania dostpu do pamici spoza przydzielonego obszaru. Oznacza to, |e [rodowisko CLR mo|e bezpiecz- nie uruchamia wiele aplikacji w ramach jednego procesu lub przestrzeni adresowej, co z kolei przekBada si na lepsz wydajno[ i ni|szy poziom wykorzystania zasobów systemu operacyjnego. Biblioteka klas platformy (FCL) jest zbiorem klas i innych typów (typów wyliczeniowych, struktur i interfejsów), które s dostpne dla zarzdzanego kodu napisanego w dowolnym jzyku zgodnym ze specyfikacj wspólnego [rodowiska uruchomieniowego (CLR). Jest to o tyle wa|ne, |e eliminuje znan z innych technologii konieczno[ wizania bibliotek z konkretnymi kompilatorami. Programista, który raz zapozna si z typami udostpnianymi przez t bibliotek, bdzie mógB t wiedz wykorzystywa podczas pracy z dowolnym wy- branym przez siebie jzykiem programowania zgodnym z technologi .NET. 42 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Zasoby w ramach biblioteki FCL podzielono pomidzy logiczne grupy nazwane przestrze- niami nazw (ang. namespaces). W wikszo[ci przypadków zakres funkcjonalno[ci tych grup jest do[ szeroki. PrzykBadowo typy wykorzystywane w operacjach graficznych pogru- powano w ramach przestrzeni nazw System.Drawing i System.Drawing.Drawing2D, natomiast typy niezbdne do wykonywania operacji wej[cia-wyj[cia na plikach umieszczono w prze- strzeni nazw System.IO. Warto pamita, |e przestrzenie nazw reprezentuj logiczny podziaB typów, a nie fizyczny. Biblioteka FCL skBada si z setek zestawów (w postaci plików DLL), z których ka|dy mo|e zawiera wiele przestrzeni nazw. Co wicej, pojedyncza przestrzeD nazw mo|e obejmowa wiele zestawów. Aby lepiej zrozumie struktur biblioteki FCL, przeanalizujmy przykBadowy zestaw tej biblioteki (patrz rysunek 1.8). Rysunek 1.8. Fragment danych wynikowych wy[wietlonych przez program Ildasm  lista przestrzeni nazw i typów skBadajcych si na dany zestaw Na rysunku 1.8 przedstawiono fragment danych wyj[ciowych wygenerowanych przez na- rzdzie Ildasm.exe  na ich podstawie mo|emy przeanalizowa zawarto[ zestawu mscorlib. Chocia| zaprezentowana lista obejmuje tylko cz[ skBadników tego zestawu, mo|emy si przekona, |e zestaw mscorlib zawiera niezwykle wa|n przestrzeD nazw System, która peBni funkcj repozytorium dla typów decydujcych o podstawowej funkcjonalno[ci technologii .NET. Zestaw mscorlib zawiera te| przestrzeD nazw System.Collection, która  jak sama nazwa wskazuje  obejmuje klasy i interfejsy wykorzystywane podczas przetwarzania ko- lekcji danych. W tabeli 1.2 wymieniono kilkana[cie najwa|niejszych przestrzeni nazw biblioteki FCL plat- formy .NET. W ostatniej kolumnie zawarto numery rozdziaBów tej ksi|ki, w których znaj- dziesz przykBady zastosowaD odpowiednich przestrzeni nazw. Przestrzenie nazw stanowi swoist map drogow dla programistów przegldajcych bi- bliotek FCL w poszukiwaniu niezbdnych klas i interfejsów. PrzykBadowo, je[li budowana aplikacja ma wykorzystywa interfejs oparty na stronach WWW, zapewne najbardziej bd nas interesowaBy typy przestrzeni nazw System.Web.*. Kiedy nauczysz si podstaw tech- nologii .NET i zdobdziesz do[wiadczenie w pracy z jzykiem programowania C#, odkryjesz, |e najwikszym wyzwaniem jest wBa[nie zapoznawanie si z wbudowanymi typami zawartymi w bibliotece klas platformy (FCL). RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 43 Tabela 1.2. Wybrane przestrzenie nazw biblioteki FCL PrzestrzeD nazw Zastosowania RozdziaB System Zawiera podstawowe typy danych wykorzystywane przez 3., 18. wszystkie aplikacje. PrzestrzeD nazw System zawiera te| klasy wyjtków, predefiniowane atrybuty, bibliotek Math oraz klasy odpowiedzialne za zarzdzanie [rodowiskiem aplikacji. System.Collections Zawiera interfejsy i klasy wykorzystywane do zarzdzania 4. kolekcjami obiektów. Do kolekcji obsBugiwanych przez System.Collections.Specialized t przestrzeD nazw nale| ArrayList, Hashtable i Stack. System.Collections.Generic System.Data Zawiera klasy wykorzystywane podczas wykonywania 11., 12. operacji na bazach danych (ADO.NET). Za obsBug System.Data.OracleClient systemów zarzdzania bazami danych Oracle i SQL Server System.Data.SSlClient odpowiadaj klienckie przestrzenie nazw, odpowiednio System.Data.OleDb OracleClient i SSlClient, natomiast przestrzenie OleDb System.Data.Odbc i Odbc definiuj operacje na poBczeniach z bazami danych. System.Diagnostics Zawiera klasy, które mog by wykorzystywane do [ledzenia 13. wykonywania programu, diagnozowania oraz przetwarzania systemowych dzienników zdarzeD i liczników wydajno[ci. System.Drawing Oferuje funkcjonalno[ graficzn dla interfejsu 8., 9. programowego GDI+. Wymienione przestrzenie System.Drawing.Drawing2D nazw zawieraj klasy obsBugujce zarówno rysowanie, System.Drawing.Printing jak i korzystanie z rozmaitych piór, pdzli, ksztaBtów System.Drawing.Text geometrycznych i czcionek. System.Globalization Zawiera klasy definiujce informacje zwizane 5. z ustawieniami regionalnymi, czyli sposobem reprezentowania dat, kwot pieni|nych i symbolami walut. System.IO Definiuje operacje wej[cia-wyj[cia na plikach i strumieniach 5. danych. Za pomoc tych klas mo|na uzyskiwa dostp do systemu plików obsBugiwanego przez wykorzystywany system operacyjny. System.Net Zawiera klasy obsBugujce protokoBy sieciowe i operacje 17. w [rodowiskach sieciowych. PrzykBadowo, przestrzeD nazw System.Net definiuje klasy WebReSuest i WebResponse, które reprezentuj odpowiednio |danie i odpowiedz przy pobraniu strony WWW. System.Reflection Zawiera typy, dziki którym mo|na w czasie wykonywania 7., 15., aplikacji przetwarza jej metadane. PrzestrzeD nazw Emit dodatek B System.Reflection.Emit umo|liwia dynamiczne generowanie metadanych i kodu jzyka po[redniego (IL) za pomoc kompilatora lub innego narzdzia. System.Runtime.InterOpServices Zapewnia mo|liwo[ wspóBpracy pomidzy zarzdzanym 8. i niezarzdzanym kodem, w tym tradycyjnymi bibliotekami DLL i obiektami COM. 44 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Tabela 1.2. Wybrane przestrzenie nazw biblioteki FCL (cig dalszy) PrzestrzeD nazw Zastosowania RozdziaB System.Security Zawiera klasy odpowiedzialne za zarzdzanie 5., 15. bezpieczeDstwem w [rodowisku .NET. Definiuje System.Security.Permissions klasy kontrolujce dostp do operacji i zasobów. System.Security.Cryptography System.Text.RegularExpressions Zawiera klasy obsBugujce wchodzcy w skBad [rodowiska 5. .NET moduB przetwarzania wyra|eD regularnych. System.Threading Zarzdza caBym cyklem |ycia wtków  tworzeniem 13. wtków, synchronizacj pracy wtków oraz dostpem System.Threading.Thread do puli wtków. System.Web Zawiera klasy wykorzystywane do rozmaitych dziaBaD 16., 17., w ramach aplikacji internetowych (oferowane klasy 18. System.Web.Services Bcznie s nazywane technologi ASP.NET). Klasy System.Web.UI przestrzeni nazw System.Web zarzdzaj komunikacj System.Web.UI.WebControls na linii przegldarka-serwer, przetwarzaj znaczniki System.Web.Security kontekstu u|ytkownika oraz zawieraj kontrolki, które poprawiaj wygld i funkcjonalno[ stron internetowych. PrzestrzeD nazw Web.Services zawiera klasy wymagane do przesyBania komunikatów XML za po[rednictwem protokoBu SOAP. PrzestrzeD nazw Web.UI zawiera klasy i interfejsy wykorzystywane do tworzenia kontrolek i stron internetowych skBadajcych si na formularze WWW. System.Windows.Forms Zawiera klasy wykorzystywane do budowy graficznego 6., 7. interfejsu u|ytkownika dla aplikacji systemu Windows. PrzestrzeD nazw Forms oferuje takie kontrolki jak ListBox, TextBox czy DataGrid. System.Xml Typy niezbdne do przetwarzania danych w formacie XML. 10. Zestaw narzdzi .NET Framework Software Development Kit (SDK) zawiera narzdzia, kom- pilatory i dokumentacj niezbdn do tworzenia oprogramowania, które bdzie prawidBowo dziaBaBo na ka|dym komputerze z zainstalowan platform .NET Framework. Wersj instala- cyjn dla systemów Windows XP, Windows 2000, Windows Server 2003 i wszystkich now- szych wersji systemu operacyjnego Windows mo|na pobra za darmo z witryny internetowej firmy Microsoft (zajmuje okoBo 100 megabajtów). Je[li masz ju| zainstalowane [rodowisko Visual Studio .NET, nie bdziesz musiaB pobiera tego zestawu narzdzi, poniewa| VS .NET instaluje je automatycznie. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 45 U|ytkownicy oprogramowania zbudowanego z wykorzystaniem zestawu narzdzi .NET Fra- mework SDK nie musz tego zestawu instalowa na swoich komputerach, powinni natomiast dysponowa odpowiedni (zgodn) wersj platformy .NET Framework. Na witrynie interne- towej firmy Microsoft3 udostpniono darmowy pakiet .NET Framework Redistributable (zajmuje ponad 20 megabajtów)  nale|y go zainstalowa na wszystkich komputerach, których u|ytkownicy bd korzystali z aplikacji opracowanych w technologii .NET. Poza systemami wymienionymi przy okazji omawiania zestawu narzdzi SDK pakiet .NET Fra- mework Redistributable mo|na instalowa tak|e w systemach Windows 98 i Windows ME. Aplikacje .NET bd  z drobnymi wyjtkami  dziaBaBy identycznie we wszystkich plat- formach systemów operacyjnych, poniewa| ich docelowym otoczeniem jest wspólne [rodo- wisko uruchomieniowe (CLR), a nie system operacyjny. Przed zainstalowaniem pakietu .NET Framework Redistributable powinni[my si upewni, |e nasz system speBnia wymagania opi- sane na witrynie internetowej firmy Microsoft i dotyczce midzy innymi zainstalowanej przegldarki internetowej Internet Explorer 5.01 lub nowszej. Aktualizowanie platformy .NET Framework W przeciwieDstwie do wielu innych [rodowisk wytwarzania oprogramowania instalowanie nowej wersji platformy .NET nie stanowi |adnego problemu i nie wymaga od u|ytkownika wikszego wysiBku. Proces instalacji umieszcza zaktualizowan wersj w nowym katalogu, którego nazwa odpowiada danej wersji platformy. Co wa|ne, nie wystpuj |adne zale|no[ci pomidzy plikami nowszych i starszych wersji tej platformy. Oznacza to, |e wszystkie wersje zainstalowane w naszym systemie s w peBni funkcjonalne. Najcz[ciej poszczególne wersje platformy .NET Framework s skBadowane w nastpujcych katalogach ([cie|ki mog si oczywi[cie ró|ni w zale|no[ci od systemu i zainstalowanych wersji): \winnt\Microsoft.NET\Framework\v1.0.3705 \winnt\Microsoft.NET\Framework\v1.1.4322 \winnt\Microsoft.NET\Framework\v2.0.40607 Ka|da instalacja nowej wersji oprogramowania platformy rodzi pytania o jej zgodno[ z aplikacjami opracowanymi z wykorzystaniem starszych wersji. Okazuje si, |e twórcy technologii .NET znalezli rozwizanie uBatwiajce uruchamianie istniejcych aplikacji na do- wolnej wersji platformy .NET. Kluczowym rozwizaniem jest plik konfiguracyjny aplikacji (ang. application configuration file  szczegóBowe omówienie tego rodzaju plików znaj- dziesz w rozdziale 15.). Jest to plik tekstowy zawierajcy znaczniki i elementy w formacie XML, które instruuj wspólne [rodowisko uruchomieniowe (CLR) o wBa[ciwym sposobie wykonywania danej aplikacji. Plik konfiguracyjny aplikacji mo|e okre[la poBo|enie ze- wntrznych zestawów, wersje tych zestawów oraz wersje platformy .NET Framework obsBu- giwane przez poszczególne aplikacje i (lub) komponenty. Chocia| pliki konfiguracyjne mo|- na przygotowywa w dowolnym edytorze tekstu, du|o lepszym rozwizaniem jest u|ycie narzdzi specjalnie zaprojektowanych z my[l o tym zadaniu (np. Framework Configuration). Pliki konfiguracyjne bdziemy wykorzystywali przede wszystkim do testowania aplikacji 3 Patrz strona internetowa http://msdn.microsoft.com/netframework/downloads/updates/default.aspx. 46 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET pod ktem ich zgodno[ci z nowymi wersjami platformy .NET. Chocia| teoretycznie jest to mo|liwe, uruchamianie aplikacji w wersjach starszych od tej, w której t aplikacje skom- pilowano, zwykle nie ma sensu. Narzdzia platformy .NET Framework Platforma .NET Framework automatyzuje mo|liwie du| cz[ zadaD i w wielu przypad- kach skutecznie ukrywa przed programist szczegóBy stosowanych rozwizaD. Istniej jed- nak sytuacje, w których interwencja programisty jest absolutnie konieczna. Odpowiednie dziaBania mog wymaga doskonaBej znajomo[ci szczegóBów funkcjonowania zestawu oraz do[wiadczenia w przygotowywaniu aplikacji do wdro|enia. Podczas pracy z technologi .NET odkryli[my wiele przykBadów tego rodzaju zadaD. UdziaB programisty bdzie nieodzowny podczas realizacji nastpujcych zadaD: dodawania pliku do zestawu, przegldania zawarto[ci zestawu, przegldania szczegóBowych informacji o konkretnej klasie, generowania pary kluczy publicznych i prywatnych celem utworzenia silnie nazwanego zestawu, edycji plików konfiguracyjnych. Wiele z tych zadaD bardziej lub mniej szczegóBowo omówimy w kolejnych rozdziaBach. Warto jednak mie [wiadomo[ istnienia narzdzi, które uBatwiaj wykonywanie odpowied- nich dziaBaD  sztuk efektywnego korzystania z cz[ci tych narzdzi (szczególnie tych wspierajcych przegldanie klas i zestawów) nale|y opanowa ju| na wczesnych etapach poznawania technologii .NET. W tabeli 1.3 wymieniono i krótko opisano kilka najbardziej przydatnych narzdzi platfor- my .NET Framework, które uBatwiaj wytwarzanie i wdra|anie aplikacji. Trzy narzdzia, Ildasm.exe, wincv.exe i .NET Framework Configuration szczegóBowo omówimy w dalszej cz[ci tego rozdziaBu. Wiele spo[ród opisanych powy|ej katalogów znajduje si w nastpujcym podkatalogu ze- stawu narzdzi .NET Framework SDK: c:\Program Files\Microsoft.NET\SDK\v2.0\Bin Uruchamianie wymienionych przed chwil narzdzi w wierszu poleceD systemu operacyj- nego Windows (z dowolnego katalogu) wymaga w pierwszej kolejno[ci dopisania [cie|ki do odpowiednich plików wykonywalnych w zmiennej systemowej Path. Aby to zrobi, nale|y wykona nastpujce kroki: 1. Kliknij prawym przyciskiem myszy ikon Mój komputer i z wy[wietlonego menu kontekstowego wybierz opcj WBa[ciwo[ci. 2. Kliknij zakBadk Zaawansowane i przycisk Zmienne [rodowiskowe. 3. Zaznacz zmienn Path i dodaj do niej [cie|k do odpowiedniego podkatalogu zestawu narzdzi SDK. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 47 Tabela 1.3. Wybrane narzdzia platformy .NET Framework Narzdzie Opis Al.exe Narzdzia Assembly Linker mo|na u|ywa do tworzenia zestawów zBo|onych z moduBów wygenerowanych przez ró|ne kompilatory. Assembly Linker Assembly Linker jest wykorzystywany tak|e do budowy zestawów obejmujcych same zasoby (tzw. zestawów satelickich). Fuslogvw.exe Narzdzie Assembly Binding Log Viewer jest wykorzystywane najcz[ciej wtedy, gdy w procesie wczytywania zestawów wystpi Assembly Binding Log Viewer jakie[ problemy. Pozwala skutecznie [ledzi kroki skBadajce si na próby wczytania zestawu. Gacutil.exe Narzdzie jest wykorzystywane do instalowania lub usuwania zestawów z globalnej pamici podrcznej zestawów (GAC). Narzdzie Global Assembly Cache Ildasm.exe Narzdzie MSIL Disassembler sBu|y do przegldania zestawów, w tym kodu jzyka po[redniego (IL) oraz metadanych. MSIL Disassembler Mscorcfg.msc DoBczone narzdzie Microsoft Management Console (MMC) zaprojektowano z my[l o konfigurowaniu zestawów bez konieczno[ci Narzdzie .NET Framework samodzielnego wprowadzania zmian w plikach konfiguracyjnych Configuration aplikacji. Dodatkowy skBadnik tego narzdzia, Framework Wizards, stworzono przede wszystkim dla administratorów, cho jest wykorzystywany tak|e przez programistów. Ngen.exe Kompiluje jzyk po[redni zestawu do postaci odpowiedniego kodu maszynowego. Generowany w ten sposób obraz jest nastpnie Native Image Generator umieszczany w pamici podrcznej rdzennych obrazów. Sn.exe Generuje klucze, które s nastpnie wykorzystywane do tworzenia silnie nazwanych (podpisanych) zestawów. Narzdzie Strong Name wincv.exe Interfejs graficzny wy[wietlajcy i umo|liwiajcy przeszukiwanie informacji o klasie. Windows Forms Class Viewer Wsdl.exe Generuje opisowe informacje o usBudze sieciowej (Web Service)  informacje mog by wykorzystywane przez klienta uzyskujcego Narzdzie Web Services dostp do danej usBugi. Description Language Je[li masz zainstalowane [rodowisko Visual Studio, du|o prostszym rozwizaniem bdzie u|ycie prekonfigurowanego wiersza poleceD tego [rodowiska. Wiersz poleceD [rodowiska VS.NET automatycznie inicjalizuje informacje o [cie|kach, które s niezbdne do uzyskiwa- nia dostpu do narzdzi wiersza poleceD. Ildasm.exe Narzdzie Intermediate Language Disassembler (Ildasm), które jest cz[ci zestawu narz- dzi .NET Framework SDK, zwykle znajduje si w podkatalogu Bin w katalogu, w którym zainstalowano ten zestaw narzdzi. Narzdzie Ildasm jest bezcenn pomoc podczas anali- zy [rodowiska zestawów platformy .NET i jako takie bdzie jednym z pierwszych narzdzi, z którym bdziesz si musiaB zaznajomi ju| na pocztku swojej przygody z zestawami .NET. 48 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Najprostszym sposobem u|ycia narzdzia Intermediate Language Disassembler jest wpisa- nie w wierszu poleceD nastpujcego wyra|enia: C:\>Ildasm /adv Opcjonalny przeBcznik /adv powoduje, |e bd dostpne zaawansowane opcje wy[wietla- nia. Wykonanie tego polecenia wywoBa graficzny interfejs u|ytkownika (GUI) z menu File, w którym bdziemy mogli wybra interesujcy nas zestaw. Warto pamita, |e narzdzie Ildasm nie otwiera plików skBadowanych w pamici podrcznej zestawów (GAC). Na rysunku 1.9 przedstawiono przykBad danych wyj[ciowych wy[wietlonych przez narz- dzie Ildasm po wybraniu jednego z zestawów. Zawarto[ zestawu jest prezentowana w czy- telnym, hierarchicznym formacie zawierajcym nazw zestawu, w tym przypadku corecsharp1, oraz wszystkie jego skBadniki. Rysunek 1.9. Zawarto[ wybranego zestawu wy[wietlona przez narzdzie Ildasm.exe U|ytkownik narzdzia mo|e wej[ w gBb tej hierarchii, aby zapozna si z reprezentowa- nym przez poszczególne skBadniki kodem jzyka po[redniego IL (lub wspólnego jzyka po[redniego  CIL). Z rysunku 1.9 wynika, |e zestaw corecsharp1 skBada si z trzech metod: Metric, conversion i metric. Potwierdza to oryginalny kod klasy Conversion napi- sany w jzyku C#: public class Conversion { public double Metric( double inches) { return (2.54 * inches); } [CLSCompliantAttribute(false)] public double metric( double miles) { return (miles / 0.62); } public double conversion( double pounds) { return (pounds * 454); } } Dwukrotne kliknicie metody Metric spowoduje wy[wietlenie ekranu z kodem jzyka po- [redniego (IL) tej metody  patrz rysunek 1.10. Narzdzie Ildasm mo|e by wykorzystywane do nauki i eksperymentowania z koncepcj jzyka po[redniego i zestawów. Program znajduje te| wa|ne zastosowania praktyczne. Przypu[my, |e dysponujemy komponentem (zestawem .NET) opracowanym przez kogo[ RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 49 Rysunek 1.10. Widok kodu jzyka po[redniego (IL) innego, i |e nie posiadamy |adnej dokumentacji na jego temat. W takich przypadkach po- szukiwanie szczegóBów na temat interfejsu tego zestawu powinni[my rozpocz wBa[nie od jego otwarcia w narzdziu Ildasm. Narzdzie Ildasm zawiera w menu File opcj Dump, za pomoc której mo|emy zapisa dokumentacj programu w pliku tekstowym. Aby utworzy dBugi, ale czytelny dokument o metadanych danego zestawu, wybierz opcj Dump Metainfo; aby zapozna si z pro- filem zestawu wBcznie z liczb bajtów wykorzystywanych przez poszczególne skBadniki, wybierz opcj Dump Statistics. Narzdzie Ildasm i zaciemnianie kodu Jednym z naturalnych odruchów programistów aplikacji .NET jest pytanie o sposób ochro- ny ich wBasno[ci intelektualnej w sytuacji, gdy istniej takie narzdzia jak Ildasm (i inne komercyjne programy odwracajce kompilacj), które mog by wykorzystywane do od- twarzania oryginalnego kodu na podstawie skompilowanych zestawów. Jednym z rozwi- zaD jest technika nazywana zaciemnianiem kodu (ang. obfuscation), która polega na zrcz- nym modyfikowaniu nazw i innych operacjach na kodzie skutecznie uniemo|liwiajcych jego odczytywanie przez ludzi. Nale|y pamita, |e zaciemnianie kodu nie jest to|same z jego szyfrowaniem. Szyfrowanie wymagaBoby wykonywania dodatkowego kroku odszyfrowywania przed przetworzeniem kodu przez kompilator JIT. Zaciemnianie polega na transformacji kodu jzyka po[redniego do postaci, w której mo|na go skompilowa za pomoc standardowych narzdzi [rodowisk wytwarzania oprogramowania (patrz rysunek 1.11). Rysunek 1.11. Zaciemnianie kodu skutecznie ukrywa oryginalny kod jzyka po[redniego (IL) 50 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Zaciemniony kod funkcjonalnie nie odbiega od oryginalnego kodu jzyka po[redniego da- nego zestawu i podczas wykonywania we wspólnym [rodowisku uruchomieniowym (CLR) generuje identyczne wyniki. Jak to mo|liwe? Otó| typowym dziaBaniem w ramach zaciem- niania kodu jest zamiana czytelnych nazw typów i skBadowych na nazwy, które czytelni- kowi takiego kodu niczego nie mówi. PrzykBadowo, kiedy zajrzysz do zaciemnionego kodu, znajdziesz tam mnóstwo typów nazwanych a lub b. Algorytm zaciemniania musi oczywi- [cie by na tyle  inteligentny , by nie zmienia nazw typów wykorzystywanych poza mody- fikowanym zestawem, poniewa| ka|da taka zmiana uniemo|liwiBaby prawidBowe odwoBania do tych typów. Innym typowym rozwizaniem jest modyfikowanie przepBywu sterowania (ang. control flow) w sposób, który nie zmienia logiki dziaBania programu. PrzykBadowo, wyra|enie while mo|na zastpi kombinacj wyra|eD goto oraz if. Zestaw narzdzi .NET Framework SDK nie zawiera wBasnego mechanizmu zaciemniania kodu. Zrodowisko programowania Visual Studio .NET jest oferowane wraz z narzdziem Dotfuscator Community Edition, czyli wersj komercyjnego produktu Dotfuscator z nieco ograniczon funkcjonalno[ci. Chocia| wspomniane narzdzie nie jest specjalnie wyrafino- wane i dziaBa wyBcznie w [rodowiskach firmy Microsoft, warto wBa[nie od niego rozpocz poznawanie tego ciekawego procesu. Wielu producentów oferuje bardziej zaawansowane pro- dukty w tym zakresie. wincv.exe WinCV jest przegldark klas analogiczn do narzdzia Visual Studio Object Viewer ofe- rowan w ramach [rodowiska VS .NET. Program znajduje si w katalogu Program Files\ Microsoft.NET\SDK\V1.x\Bin i mo|na go uruchamia z poziomu wiersza poleceD. Po wy- [wietleniu okna graficznego interfejsu u|ytkownika WinCV nale|y wpisa nazw intere- sujcej nas klasy w polu tekstowym Searching For (patrz rysunek 1.12). WinCV oferuje bogaty zasób informacji o wszystkich typach obsBugiwanych przez biblio- tek klas bazowych. Cztery obszary zaznaczone na rysunku 1.12 pokazuj próbki dostp- nych danych: 1. Przedmiotem analizy jest klasa bazowa System.Array. 2. Klasa System.Array jest cz[ci zestawu mscorlib.dll. Wspominali[my ju|, |e zestaw mscorlib.dll zawiera najwa|niejsze typy zarzdzane platformy .NET. 3. Lista zawiera klas, obiekt i interfejsy dziedziczone przez klas System.Array. 4. Wy[wietlona reprezentacja zawiera definicj ka|dej z metod tej klasy, która obejmuje uprawnienia dostpu, typ oraz parametry  definicja w tej postaci jest nazywana sygnatur metody. Narzdzie Framework Configuration Narzdzie Framework Configuration oferuje proste rozwizania w zakresie zarzdzania i kon- figuracji zestawów oraz ustawiania zabezpieczeD w dostpie do kodu. Narzdzie jest cz[ci konsoli Microsoft Management Console (MMC). Aby je uruchomi, w Panelu sterowania RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 51 Rysunek 1.12. PrzykBad u|ycia narzdzia WinCV do przegldania definicji typu klasy Array kliknij ikon Narzdzia administracyjne i wybierz skrót Microsoft .NET Framework Konfi- guracja. Program Framework Configuration stworzono z my[l o administratorach, którzy musz wykonywa nastpujce zadania: Zarzdzanie zestawami. Zestawy mog by dodawane lub usuwane z pamici podrcznej GAC. Konfigurowanie zestawów. W razie aktualizacji zestawu osoba, która go opublikowaBa, jest odpowiedzialna za odpowiednie dostosowanie reguB wizania (ang. binding policy) tego zestawu. Na podstawie tych reguB wspólne [rodowisko uruchomieniowe okre[la wBa[ciw wersj wczytywanego zestawu w odpowiedzi na wykryte odwoBanie do zestawu w której[ z wykonywanych aplikacji. PrzykBadowo, je[li zestaw w wersji 1.1 zastpi zestaw 1.0, reguBy doBczania powinny tak przekierowa odwoBania do wersji 1.0, aby [rodowisko CLR wczytywaBo wersj 1.1. Odpowiednie informacje nale|y umie[ci w pliku konfiguracyjnym. Analiza zabezpieczeD platformy .NET Framework i modyfikowanie reguB bezpieczeDstwa zestawów. Mechanizmy zabezpieczeD platformy .NET umo|liwiaj przypisywanie poszczególnym zestawom okre[lonych uprawnieD dostpu. Co wicej, docelowy zestaw mo|e wymaga posiadania uprawnieD dostpu od pozostaBych zestawów, które |daj dostpu do danego zestawu. Zarzdzanie interakcj poszczególnych aplikacji z zestawem lub zbiorem zestawów. Narzdzie Framework Configuration umo|liwia przegldanie nie tylko list wszystkich zestawów wykorzystywanych przez dan aplikacj, ale te| kompletnych zbiorów wykorzystywanych wersji. 52 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET Aby lepiej zilustrowa praktyczne zastosowania tego narzdzia konfiguracyjnego, przeana- lizujemy sposób jego u|ycia do rozwizania jednego z najczstszych problemów napotyka- nych w procesie wytwarzania oprogramowania  konieczno[ci powrotu do ostatniej dzia- Bajcej wersji w razie problemów z funkcjonowaniem wersji bie|cej. Realizacja tego zadania mo|e by szczególnie trudna w sytuacji, gdy aplikacja wykorzystuje po stronie serwera bi- blioteki DLL lub zestawy. Okazuje si, |e twórcom technologii .NET udaBo si znalez do[ sprytne rozwizanie  za ka|dym razem, gdy uruchamiamy jak[ aplikacj, [rodowisko uruchomieniowe zapisuje w dzienniku zdarzeD informacje o wszystkich wykorzystywanych zestawach. Je[li wersje tych zestawów nie zmieni si od ostatniego uruchomienia, zostan zignorowane przez [rodowisko CLR; w przeciwnym razie zostanie zachowana  migawka nowego zbioru zestawów. Kiedy próba uruchomienia aplikacji zakoDczy si niepowodzeniem lub aplikacja nie bdzie dziaBaBa prawidBowo, programista bdzie mógB w prosty sposób powróci do wersji zestawów, które nie powodowaBy podobnych problemów. Narzdzie konfiguracyjne mo|e posBu|y do przekierowania aplikacji do wcze[niejszej wersji zaktualizowanego ostatnio zestawu. Przy- datno[ tego rodzaju narzdzi jest szczególnie widoczna w sytuacji, gdy ewentualny problem dotyczy wicej ni| jednego zestawu  programista mo|e si zapozna z dotychczasowymi konfiguracjami zestawów i wybra caBy zestaw zestawów dla danej aplikacji. Aby wy[wietli i ewentualnie wybra poprzednie konfiguracje, w menu narzdzia Frame- work Configuration kliknij kolejno pozycj Applications i opcj Fix an Application. Na ry- sunku 1.13 przedstawiono fragmenty obu wy[wietlonych okien dialogowych. Okno gBówne zawiera list aplikacji, których wykonanie zostaBo zarejestrowane w dzienniku zdarzeD. Mniejsze okno (w tym przypadku obcita cz[ wikszego okna dialogowego) zostanie wy- [wietlone po klikniciu której[ z tych aplikacji. Okno zawiera list ostatnich konfiguracji (maksymalnie piciu) przypisanych do danej aplikacji. Wystarczy wybra konfiguracj zesta- wów, której chcemy u|y dla wskazanej aplikacji. Rysunek 1.13. PrzykBad u|ycia narzdzia konfiguracyjnego aplikacji do ustawiania wersji zestawów Jak wida, narzdzie konfiguracyjne stworzono przede wszystkim z my[l o administrato- rach. Programi[ci powinni korzysta tylko z wybranych podzbiorów funkcjonalno[ci tego narzdzia zawartych w trzech kreatorach: Dopasuj zabezpieczenia .NET, Ufaj zestawowi oraz Napraw aplikacj. Dostp do tych kreatorów mo|na uzyska, klikajc ikon Microsoft .NET Framework Kreatorzy w Narzdziach administracyjnych. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 53 Wielu programistów piszcych zBo|one aplikacje dla platformy .NET wykorzystuje Visual Stu- dio lub jakie[ inne zintegrowane [rodowisko wytwarzania oprogramowania (ang. Integrated Development Environment  IDE) do edycji kodu, doBczania zewntrznych zestawów, diagnozowania aplikacji i generowania ostatecznych, skompilowanych wersji oprogramowa- nia. Je[li i Ty zaliczasz si do tej grupy, znajomo[ technik korzystania z zestawu narz- dzi .NET SDK i podstawowego kompilatora C# najprawdopodobniej nie bdzie Ci potrzebna, cho z pewno[ci podniosBaby poziom wiedzy o procesie kompilacji w technologii .NET i daBa lepsze podstawy do pracy z zestawami. Efektem ubocznym korzystania z kompilatora C# na poziomie wiersza poleceD byBoby te| zdobycie cennego do[wiadczenia w korzystaniu z programów wchodzcych w skBad zestawu narzdzi SDK. Wiele spo[ród narzdzi za- prezentowanych w poprzednim podrozdziale jest wywoBywanych wBa[nie z wiersza poleceD, a w niektórych sytuacjach mo|liwo[ przeprowadzania procesu kompilacji w takim [rodowi- sku okazuje si kuszc alternatyw dla zaawansowanych mechanizmów [rodowisk IDE. Na rysunku 1.14 przedstawiono podstawowe kroki skBadajce si na proces konwertowania kodu zródBowego na ostateczn, skompilowan wersj oprogramowania. Celem niniejszego podrozdziaBu jest prezentacja, jak edytor tekstu w poBczeniu z kompilatorem C# mo|e by wykorzystywany konstruowania aplikacji. Przy okazji przeanalizujemy wiele opcji kompi- latora, które czsto pozostaj ukryte przed u|ytkownikami zintegrowanych [rodowisk wytwa- rzania oprogramowania (IDE). Rysunek 1.14. Schemat procesu kompilacji Lokalizowanie kompilatora Kompilator jzyka programowania C#, csc.exe, znajduje si w katalogu, w którym zainsta- lowano platform .NET Framework: C:\winnt\Microsoft.NET\Framework\v2.0.40607 Zcie|ka do pliku wykonywalnego kompilatora mo|e si oczywi[cie ró|ni w zale|no[ci od stosowanego systemu operacyjnego i zainstalowanej wersji platformy .NET Framework. Aby kompilator C# byB dostpny w wierszu poleceD niezale|nie od bie|cego katalogu, 54 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET powiniene[ doda t [cie|k do zmiennej systemowej Path. Odpowiedni procedur opisa- no w poprzednim podrozdziale przy okazji omawiania [cie|ek dostpu do programów wcho- dzcych w skBad zestawu narzdzi SDK. Aby si upewni, |e kompilator rzeczywi[cie jest dostpny z dowolnego katalogu, wpisz w wierszu poleceD nastpujce wyra|enie: C:\>csc /help Kompilowanie oprogramowania z poziomu wiersza poleceD Aby skompilowa napisan w jzyku C# aplikacj konsoli, nazwan client.cs, do postaci pliku wykonywalnego client.exe, nale|y wykona na poziomie wiersza poleceD jedno z przed- stawionych poleceD: C:\> csc client.cs C:\> csc /t:exe client.cs Oba wyra|enia spowoduj, |e plik z kodem zródBowym zostanie skompilowany do postaci pliku wykonywalnego z rozszerzeniem .exe, czyli domy[lnego formatu wyj[ciowego kom- pilatora. Typ docelowy mo|na okre[li za pomoc flagi /t: (patrz tabela 1.4). Aby utworzy plik DLL, nale|y ustawi dla tej flagi warto[ library, natomiast aplikacja WinForms b- dzie wymagaBa u|ycia flagi /t:winexe. Warto pamita, |e je[li tworzc aplikacj WinForms, u|yjemy flagi /t:exe, kompilacja zakoDczy si pomy[lnie, tyle |e w czasie wykonywania aplikacji zostanie wy[wietlone w tle okno konsoli. Najwiksz zalet korzystania z podstawowego kompilatora jzyka C# (wywoBywanego z poziomu wiersza poleceD) jest mo|liwo[ pracy z wieloma plikami i zestawami. Aby lepiej to zilustrowa, napiszemy w jzyku C# dwa proste pliki zródBowe: client.cs i clientlib.cs. client.cs using System; public class MyApp { static void Main(string[] args) { ShowName.ShowMe("Core C#"); } } clientlib.cs using System; public class ShowName { public static void ShowMe(string MyName) { Console.WriteLine(MyName); } } RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 55 Tabela 1.4. Wybrane opcje kompilatora C# uruchamianego w wierszu poleceD Opcja Opis /addmodule Okre[la moduB, który nale|y doBczy do tworzonego zestawu. Jest to najprostszy sposób tworzenia wieloplikowych zestawów. /debug Wymusza wygenerowanie informacji diagnostycznych. /define Umo|liwia przekazywanie do kompilatora dyrektywy preprocesora: /define:DEBUG. /delaysign Kompiluje zestaw z siln nazw, korzystajc z techniki odroczonego podpisywania (ang. delayed signing  patrz rozdziaB 15.). /doc SBu|y do wskazywania pliku wyj[ciowego dla generowanej dokumentacji XML. /keyfile Okre[la [cie|k do pliku .snk zawierajcego par kluczy niezbdn do silnego nazwania danego zestawu (patrz rozdziaB 15.). /lib Okre[la miejsce skBadowania doBczanych zestawów zewntrznych (wskazanych w opcji /reference). /out Okre[la nazw docelowego pliku dla skompilowanej wersji. Nazwa domy[lna jest taka sama jak dla pliku wej[ciowego (rozszerzenie .cs jest zastpowane rozszerzeniem .exe). /reference (/r) OdwoBuje si do zewntrznego zestawu. /resource SBu|y do osadzania plików zasobów w ramach tworzonego zestawu. /target (/t) Okre[la typ tworzonego pliku wyj[ciowego: /t:exe kompiluje aplikacj konsoli nazwan *.exe. Flaga /t:exe jest domy[ln opcj kompilacji. /t:library kompiluje zestaw nazwany *.dll. /t:module kompiluje moduB (przeno[ny plik wykonywalny), który nie zawiera manifestu. /t:winexe kompiluje zestaw Windows Forms nazwany *.exe. Na tym etapie nie ma znaczenia, czy rozumiesz szczegóBowe konstrukcje jzykowe  wy- starczy, |e bdziesz wiedziaB, |e kod zawarty w pliku client.cs wywoBuje funkcj zdefinio- wan w pliku clientlib.cs i wy[wietla otrzyman warto[ w oknie konsoli. Kompilator C# oferuje wiele sposobów implementacji tego rodzaju zwizków, które demonstruj nie tylko podstawowe opcje kompilatora, ale te| rzucaj nieco [wiatBa na ogóln koncepcj zestawów. PrzykBad 1.: kompilacja wielu plików Kompilator jzyka C# mo|e otrzyma na wej[ciu dowoln liczb plików zródBowych. Wy- generowane dane wyj[ciowe zostan umieszczone w pojedynczym pliku zestawu: csc /out:client.exe client.cs clientlib.cs 56 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET PrzykBad 2.: tworzenie i u|ywanie biblioteki klas Skompilowany kod z pliku zródBowego clientlib.cs mo|na umie[ci w osobnej bibliotece, któ- ra bdzie nastpnie udostpniana wszystkim zainteresowanym klientom: csc /t:library clientlib.cs W wyniku tej operacji otrzymamy zestaw nazwany clientlib.dll. Mo|emy teraz skompilowa kod klienta, stosujc polecenie odwoBujce si do tego zewntrznego zestawu: csc /r:clientlib.dll client.cs Kompilator wygeneruje zestaw nazwany client.exe. Je[li przeanalizujesz ten zestaw za po- moc narzdzia Ildasm, przekonasz si, |e jego manifest zawiera odwoBanie do skompilowa- nego wcze[niej zestawu clientlib.dll. PrzykBad 3.: tworzenie zestawu wieloplikowego Zamiast tworzy osobny zestaw, skompilowan wersj kodu zawartego w pliku clientlib.cs mo|na umie[ci wewntrz zestawu client.exe. Poniewa| tylko plik w zestawie mo|e zawie- ra manifest, w pierwszej kolejno[ci bdziemy musieli skompilowa plik clientlib.cs do po- staci przeno[nego moduBu wykonywalnego4 (ang. Portable Executable  PE). Aby otrzy- ma taki moduB, wystarczy w wywoBaniu kompilatora u|y opcji /t:module: csc /t:module clientlib.cs Plik wyj[ciowy zostanie nazwany clientlib.netmodule. Mo|na ten plik umie[ci w zestawie client.exe za pomoc przeBcznika /addmodule kompilatora csc.exe: csc /addmodule:clientlib.netmodule client.cs Wynikowy zestaw bdzie si skBadaB z dwóch plików: client.exe i clientlib.netmodule. PrzykBady przedstawione na rysunku 1.15 dobrze pokazuj, |e nawet w przypadku tak pro- stej aplikacji programista ma do dyspozycji szereg rozwizaD i musi podj wBa[ciw decyzj odno[nie architektury implementowanego oprogramowania. Rysunek 1.15. Mo|liwe rozwizania w zakresie wdra|ania aplikacji 4 Format PE definiuje ukBad plików wykonywalnych, które mo|na uruchamia w 32- i 64-bitowych systemach Windows. RozdziaB 1. Wprowadzenie do technologii .NET i jzyka C# 57 Platforma .NET Framework skBada si ze wspólnego [rodowiska uruchomieniowego (CLR) i biblioteki klas platformy (FCL). Zrodowisko CLR zarzdza wszystkimi zadaniami zwi- zanymi z wykonywaniem kodu aplikacji. Pierwszym zadaniem tego [rodowiska jest spraw- dzenie, czy uruchamiana aplikacja rzeczywi[cie jest zgodna ze standardow specyfikacj wspólnego jzyka (CLS). Bezpo[rednio potem wspólne [rodowisko uruchomieniowe wczy- tuje aplikacj i lokalizuje wszystkie zale|ne zestawy. Wykorzystywany przez to [rodowisko kompilator JIT (Just-in-Time) konwertuje kod jzyka po[redniego zawarty w zestawie apli- kacji (najmniejszej jednostce wdro|eniowej w technologii .NET) do postaci rdzennego kodu maszynowego. W czasie wBa[ciwego wykonywania programu [rodowisko CLR odpowiada za zapewnianie bezpieczeDstwa, zarzdzanie wtkami, przydziaB pamici oraz zwalnianie pa- mici nieu|ywanej (z wykorzystaniem odpowiedniego mechanizmu odzyskiwania pamici). CaBy kod musi by umieszczony w specjalnych zestawach, które mog by prawidBowo ob- sBugiwane przez wspólne [rodowisko uruchomieniowe (CLR). Zestaw mo|e mie albo po- sta pojedynczego pliku, albo grupy wielu fizycznych plików traktowanych jak pojedyncza jednostka wdro|eniowa. Zestaw mo|e zawiera zarówno moduBy kodu, jak i niezbdne pli- ki zasobów. Biblioteka FCL zawiera zbiór klas i pozostaBych typów wielokrotnego u|ytku, które mog by wykorzystywane przez dowolny zestaw zgodny z wymaganiami wspólnego [rodowiska uruchomieniowego (CLR). Takie rozwizanie eliminuje konieczno[ stosowania bibliotek wBa[ciwych dla poszczególnych kompilatorów. Chocia| biblioteka FCL skBada si z wielu fizycznych plików DLL zawierajcych ponad tysic ró|nych typów, przeszukiwanie tej bi- blioteki jest stosunkowo proste dziki zastosowaniu przestrzeni nazw, które tworz logiczn hierarchi obejmujc wszystkie obsBugiwane typy. Platforma .NET Framework zawiera szereg przydatnych narzdzi, które mog pomóc nie tylko programi[cie w diagnozowaniu i wdra|aniu oprogramowania, ale tak|e administrato- rowi w realizacji takich zadaD jak zarzdzanie zestawami, prekompilowanie zestawów, do- dawanie nowych plików do zestawów oraz przegldanie szczegóBowych informacji o klasach. Co wicej, istnieje bogaty zbiór narzdzi typu open source (oferowanych z otwartym dost- pem do kodu zródBowego), które tak|e mog stanowi cenn pomoc w procesie wytwarzania oprogramowania dla platformy .NET. 1. Jakie przeno[ne [rodowisko nale|y zainstalowa na komputerze klienta (u|ytkownika), aby mo|na na nim byBo uruchomi aplikacj .NET? 2. Czym jest zarzdzany, a czym jest kod niezarzdzany? 3. Jaka jest ró|nica pomidzy wspólnym systemem typów (CTS) a specyfikacj wspólnego jzyka (CLS)? 58 Cz[ I Podstawy programowania w jzyku C# i wprowadzenie do technologii .NET 4. Jak to mo|liwe, |e we wspólnym [rodowisku uruchomieniowym kod wygenerowany przez ró|ne kompilatory mo|e ze sob wspóBpracowa? 5. Jak rol peBni globalna pami podrczna zestawów? 6. WymieD cztery skBadniki, które skBadaj si na identyfikator silnie nazwanego zestawu. 7. Jaka relacja Bczy przestrzeD nazw z zestawem .NET? 8. RozwiD i krótko opisz pojcia kryjce si za nastpujcymi akronimami: CLR, GAC, FCL, IL.

Wyszukiwarka

Podobne podstrony:
Debugowanie NET Zaawansowane techniki diagnostyczne?bnet
CSharp Introduction to C# Programming for the Microsoft NET Platform (Prerelease)
aoki densetsu shoot! e05 [saizen] (osloskop net)
net h (2)
DOD Net Centric Data Strategy and Community of Interest (COI) Training Glossary
Klass 2007 DVDRip XviD MESS (osloskop net)
net 3 howto pl 8
java net URLStreamHandler
VB NET Module 1 Overview of the Microsoft NET Platform
java net UnknownServiceException

więcej podobnych podstron