Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
C# i .NET
Autor: Stephen C. Perry
Tumaczenie: Mikoaj Szczepaniak (przedmowa, rozdz.
1 10), Tomasz Walczak (rozdz. 11 18, dod. A, B)
ISBN: 83-246-0320-4
Tytu oryginau: Core C# and .NET
Format: B5, stron: 912
O autorze ....................................................................................................................................................17
Podzikowania ...........................................................................................................................................18
Sowo wstpne ...........................................................................................................................................19
Przedmowa ................................................................................................................................................21
C# i .NET
char ................................................................................................................... 67
byte, sbyte .......................................................................................................... 68
short, int, long .................................................................................................... 68
single i double .................................................................................................... 68
Konwertowanie acuchw 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 przepyw sterowania .......................................................... 71
if-else ................................................................................................................. 71
switch ................................................................................................................ 73
2.4. Ptle .................................................................................................................. 74
Ptla while .......................................................................................................... 74
Ptla do ............................................................................................................. 74
Ptla for ............................................................................................................. 75
Ptla foreach ...................................................................................................... 75
Kontrola przepywu sterowania w ptlach .............................................................. 76
2.5. Dyrektywy preprocesora C# .................................................................................. 76
Kompilacja warunkowa ........................................................................................ 77
Dyrektywy diagnostyczne ...................................................................................... 79
Regiony (obszary) kodu ........................................................................................ 79
2.6. acuchy znakw ................................................................................................ 79
Stae acuchowe ................................................................................................ 80
Operacje na acuchach ....................................................................................... 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 waciwoci tablicy System.Array ............................................ 88
2.9. Typy referencyjne i wartociowe ............................................................................ 90
Klasy System.Object i System.ValueType .............................................................. 90
Techniki przydzielania pamici dla typw referencyjnych i typw wartociowych ........ 91
Technika pakowania ............................................................................................ 92
Podsumowanie rnic pomidzy typami wartociowymi a typami referencyjnymi ........ 94
2.10. Podsumowanie ................................................................................................... 95
2.11. Sprawd, czego si nauczye .............................................................................. 95
Spis treci
C# i .NET
4.6. Zarzdzanie cyklem ycia obiektw ..................................................................... 199
Odzyskiwanie pamici w technologii .NET ............................................................ 199
4.7. Podsumowanie .................................................................................................. 205
4.8. Sprawd, czego si nauczye ............................................................................. 205
207
Spis treci
10
C# i .NET
Przykad kontrolki UserControl ............................................................................ 355
Stosowanie niestandardowych kontrolek uytkownika ........................................... 356
Praca z kontrolkami uytkownika 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 zasobw ....................................................................................... 364
Praca z plikami zasobw .................................................................................... 364
Stosowanie plikw zasobw w procesie tworzenia formularzy obsugujcych
wiele jzykw .................................................................................................. 368
7.10. Podsumowanie ................................................................................................. 371
7.11. Sprawd, czego si nauczye ............................................................................ 371
Spis treci
11
12
C# i .NET
12.2. Uywanie prostego i zoonego wizania danych w aplikacjach .............................. 526
Wizanie z obiektem DataTable .......................................................................... 526
Wizanie kontrolek z obiektem ArrayList .............................................................. 528
Dodawanie elementw do rda danych ............................................................. 530
Identyfikacja aktualizacji .................................................................................... 531
Aktualizacja oryginalnej bazy danych ................................................................... 532
12.3. Klasa DataGridView ........................................................................................... 532
Waciwoci ...................................................................................................... 532
Zdarzenia ......................................................................................................... 539
Ustawianie relacji nadrzdna-szczegowa w kontrolkach DataGridView .................. 543
Tryb wirtualny .................................................................................................... 545
12.4. Podsumowanie .................................................................................................. 550
12.5. Sprawd, czego si nauczye ............................................................................. 550
553
Spis treci
13
675
14
C# i .NET
16.3. Wizanie danych oraz kontrolki do obsugi rde danych ...................................... 711
Wizanie z obiektem DataReader ....................................................................... 711
Wizanie z obiektem DataSet ............................................................................. 712
Kontrolki do obsugi rde danych ...................................................................... 714
16.4. Kontrolki walidacyjne ......................................................................................... 721
Uywanie kontrolek walidacyjnych ....................................................................... 721
16.5. Strony gwne i strony z treci .......................................................................... 725
Tworzenie strony gwnej ................................................................................... 726
Tworzenie stron z treci ................................................................................... 727
Dostp do strony gwnej ze stron z treci ......................................................... 728
16.6. Tworzenie i uywanie niestandardowych kontrolek Web ........................................ 729
Przykadowa niestandardowa kontrolka ............................................................... 729
Uywanie niestandardowych kontrolek ................................................................. 732
Zarzdzanie stanem kontrolki ............................................................................. 732
Kontrolki zoone ............................................................................................... 733
16.7. Wybr kontrolki Web do wywietlania danych ....................................................... 736
16.8. Podsumowanie .................................................................................................. 737
16.9. Sprawd, czego si nauczye ............................................................................. 737
Spis treci
15
Dodatki
837
27
Zestawy .NET analiza struktury zestaww, filozofii tych zestaww oraz rnic
pomidzy zestawami prywatnymi a zestawami wspdzielonymi.
Biblioteka klas platformy (FCL) biblioteka platformy .NET oferuje setki klas
bazowych pogrupowane w ramach logicznych przestrzeni nazw.
28
Platform .NET zaprojektowano jako zintegrowane rodowisko, ktre w zaoeniu ma umoliwia bezproblemowe wytwarzanie i uruchamianie aplikacji internetowych, aplikacji bazujcych na Windows Forms, a nawet aplikacji dla urzdze mobilnych (z wykorzystaniem
platformy Compact Framework). Na poniszej licie wymieniono podstawowe cele, jakie postawili sobie twrcy tej platformy:
n
29
30
31
32
Wsplne rodowisko uruchomieniowe (CLR) zarzdza caym cyklem ycia aplikacji: lokalizuje i kompiluje kod, wczytuje powizane klasy, zarzdza wykonywaniem aplikacji, a take
zapewnia automatyczne zarzdzanie pamici. Co wicej, rodowisko CLR obsuguje ca
integracj jzykw programowania, czyli de facto odpowiada za bezproblemow wspprac kodu zapisanego w rnych jzykach i skompilowanego za pomoc rnych kompilatorw. W niniejszym podrozdziale przyjrzymy si funkcjonowaniu wewntrznych mechanizmw wsplnego rodowiska uruchomieniowego, aby si przekona, jak opisane przed chwil
cele faktycznie s realizowane. Nie bdzie to co prawda analiza szczegowa, ale z pewnoci
wystarczy do zapoznania si z terminologi, zaznajomienia z architektur niezalen od jzykw programowania i zrozumienia, co rzeczywicie si dzieje w momencie, w ktrym tworzymy i uruchamiamy nasze programy.
Rysunek 1.3.
Funkcje wsplnego
rodowiska
uruchomieniowego
(CLR)
33
jzyku napisano dan aplikacj. rodowisko CLR otrzymuje kod jzyka poredniego (IL),
ktry jest niezaleny od stosowanych jzykw programowania. Poniewa aplikacje komunikuj si midzy sob wanie za porednictwem swojego kodu jzyka poredniego, efekty
pracy jednego kompilatora mog by integrowane z kodem wygenerowanym przez inny
kompilator.
Realizacja innego wanego celu technologii .NET, przenonoci, jest moliwa dziki przeniesieniu procesu tworzenia kodu maszynowego na poziom kompilatora JIT. Oznacza to, e
wygenerowany na jednej platformie kod jzyka poredniego moe by wykonywany na innej
platformie zawierajcej wasn platform i kompilator JIT, ktry generuje kod maszynowy
waciwy dla tej platformy.
Poza generowaniem kodu jzyka poredniego kompilatory speniajce wymagania wsplnego rodowiska uruchomieniowego (CLR) dodatkowo musz generowa odpowiednie metadane w kadym module kodu. Metadane maj posta zbioru tabel, ktry zapewnia tym
moduom kodu niezwykle wan wasno samoopisywania. Takie tabele zawieraj informacje o zestawie, pakiecie kodu (ang. assembly), do ktrego naley dany kod, oraz kompletny
opis samego kodu. Reprezentowane w ten sposb informacje obejmuj midzy innymi dostpne typy, nazwy poszczeglnych typw, skadowe typw, atrybuty zasigu (widocznoci) typw
oraz wszelkie inne cechy typw. Metadane maj wiele zastosowa:
n
Wanie jzyk poredni (IL) i metadane decyduj o moliwoci wzajemnej wsppracy wielu
jzykw programowania, jednak faktyczny sukces tego rozwizania zaley od tego, czy
wszystkie kompilatory .NET rzeczywicie bd obsugiway wsplny zbir typw danych
i specyfikacje jzykw. Przykadowo, dwa rne jzyki nie mog by ze sob w peni zgodne
34
35
Regua
Widoczno (zasig)
Aby dwie zmienne byy traktowane jak osobne struktury, ich nazwy musz si
rni czym wicej ni tylko wielkoci liter.
Typy podstawowe
Wywoania konstruktorw Konstruktor musi wywoa konstruktor klasy bazowej, zanim bdzie mg
uzyska dostp do ktregokolwiek z jej pl.
Granice tablic
Typy wyliczeniowe
Dolna granica (najniszy indeks) wszystkich wymiarw tablic jest zero (0).
Typem bazowym wykorzystywanym w typach wyliczeniowych musi by Byte,
Int16, Int32 lub Int64.
Sygnatury metod
Nawet jeli nie masz dowiadczenia w pracy z kodem jzyka C#, powiniene bez trudu
wskaza miejsce, w ktrym przedstawiony kod narusza reguy specyfikacji CLS. Zgodnie
z drug regu opisan w tabeli 1.1 nazwy konstrukcji jzykowych s uwaane za rne, jeli rni si czym wicej ni tylko wielkoci znakw. atwo zauway, e nazwy metod
36
dowo zinterpretowany przez kompilator jzyka C#, jednak ju program napisany w jzyku
Visual Basic.NET ktry ignoruje wielko liter nie mgby odrni nazw obu metod.
Zestawy .NET
Cay zarzdzany kod wykonywany na platformie .NET musi si znajdowa w specjalnych
zestawach (nazywanych te pakietami kodu lub moduami .NET). Kady taki zestaw logicznie jest przetwarzany jako pojedynczy plik EXE lub DLL. Fizycznie zestaw .NET moe
si jednak skada z caej kolekcji plikw 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 rdowy na odpowiedni plik DLL lub EXE. Jak wida na rysunku 1.5,
zestaw skada si z manifestu, metadanych oraz wygenerowanego przez kompilator jzyka poredniego (IL). Poniej przyjrzymy si poszczeglnym skadnikom zestaww nieco
dokadniej.
Rysunek 1.5.
Zestaw .NET
skadajcy si
z jednego pliku
37
Jak ju wspomniano, zestaw moe si skada z wielu plikw. Nie musz to by wycznie
moduy kodu w skad zestawu mog wchodzi take pliki zasobw, w tym obrazy graficzne i pliki tekstowe. W typowych zastosowaniach tego rodzaju pliki maj na celu umoliwienie aplikacji wykorzystywanie zasobw niezbdnych do prezentacji interfejsu uytkownika
z uwzgldnieniem ustawie kraju i jzyka docelowego uytkownika. Warto pamita, e nie
ma adnych ogranicze co do liczby plikw w zestawie. Na rysunku 1.6 przedstawiono struktur wieloplikowego zestawu .NET.
Przedstawiony diagram wieloplikowego zestawu pokazuje wyranie, e manifest zestawu zawiera informacje identyfikujce wszystkie pliki wchodzce w skad tego zestawu.
38
Rysunek 1.6.
Zestaw
wieloplikowy
Pliki zasobw mog tworzy wasny modu, ktry bdzie odseparowany od moduw
jzyka poredniego (IL). Takie rozwizanie uatwi korzystanie ze wsplnych zasobw
przez wiele aplikacji.
Wieloplikowe zestawy mona tworzy albo za pomoc kompilatora C# uruchamianego z poziomu wiersza polece, albo za pomoc narzdzia czcego zestawy .NET, czyli Assembly
Linkera, Al.exe. W ostatnim podrozdziale tego rozdziau przedstawiono przykad uycia do
tego celu kompilatora jzyka C#. Warto pamita, e w rodowisku Visual Studio.NET 2005
tworzenie wieloplikowych zestaww nie jest obsugiwane.
39
by atwiejsza zwykle wymaga tylko skopiowania zestawu do katalogu bazowego, nazwanego AppBase, w ktrym znajduje si dana aplikacja. Nie s wymagane adne zmiany
w ustawieniach rejestru. Co wicej, istnieje moliwo dodania pliku konfiguracyjnego aplikacji, ktry przykryje ustawienia zapisane w manifecie i umoliwi przenoszenie plikw zestaww w ramach katalogu AppBase.
Zestawy wspdzielone to takie, ktre s instalowane w lokalizacji globalnej, nazywanej globaln pamici podrczn zestaww (ang. Global Assembly Cache GAC), skd s udostpniane wielu aplikacjom. Najwaniejsz zalet globalnej pamici podrcznej zestaww
jest moliwo rwnoczesnego korzystania z wielu wersji tych samych zestaww. Waciwa
realizacja tej koncepcji wymagaa od twrcw technologii .NET wyeliminowania problemu
konfliktw nazw, ktry jest prawdziw plag w tradycyjnych bibliotekach DLL zdecydowano si na uycie a czterech rnych atrybutw identyfikujcych zestawy: nazwy pliku,
ustawie kulturowych (regionalnych), numeru wersji oraz tokenu klucza publicznego.
Publiczne zestawy zwykle s skadowane w katalogu assembly zlokalizowanym gdzie wewntrz katalogu systemu operacyjnego (czyli np. wewntrz katalogu WINNT\ w przypadku
systemu Microsoft Windows 2000). Na rysunku 1.7 przedstawiono zrzut ekranu, ktry dobrze ilustruje specjalny format wywietlania wszystkich czterech atrybutw (platforma .NET
zawiera plik DLL, ktry rozszerza funkcjonalno Eksploratora Windows o mechanizmy
prezentacji zawartoci pamici podrcznej GAC). Przyjrzyjmy si teraz kademu z tych czterech atrybutw.
Rysunek 1.7. Fragment listy zestaww wchodzcych w skad globalnego katalogu zestaww
Nazwa zestawu. Nazywana take przyjazn nazw (ang. friendly name), ma posta
nazwy pliku bez rozszerzenia.
Wersja. Kady zestaw ma przypisany numer wersji, ktry jest stosowany dla
wszystkich plikw wchodzcych w skad tego zestawu. Numer wersji skada si
z czterech liczb w nastpujcym formacie:
<numer gwny>.<numer dodatkowy>.<kompilacja>.<poprawka>
Gwne i dodatkowe numery wersji zwykle s aktualizowane w przypadku
wprowadzenia zmian, ktre zrywaj zgodno wstecz (z wczeniejszymi wersjami).
Numery wersji mona przypisywa do zestaww, doczajc w ich kodzie rdowym
atrybut AssemblyVersion.
40
Prekompilacja zestawu
Po wczytaniu zestawu naley skompilowa kod jzyka poredniego do postaci rdzennego kodu maszynowego. Jeli masz ju dowiadczenie w pracy z plikami wykonywalnymi w formacie kodu maszynowego, zapewne bdzie Ci interesowaa wydajno tego rozwizania
i ewentualnie moliwo tworzenia odpowiednikw plikw wykonywalnych w rodowisku .NET. Odpowied na drugie pytanie brzmi: tak technologia .NET przewiduje moliwo prekompilowania zestaww.
Platforma .NET Framework zawiera narzdzie generatora rdzennych obrazw (ang. Native
Image Generator, Ngen), ktre umoliwia kompilowanie zestaww do postaci rdzennych
obrazw skadowanych w specjalnej pamici podrcznej zarezerwowanym obszarze
wspominanej ju pamici podrcznej GAC. Za kadym razem, gdy wsplne rodowisko uruchomieniowe (CLR) wczytuje zestaw, przeszukuje t pami podrczn pod ktem ewentualnej dostpnoci rdzennego obrazu; jeli znajdzie taki obraz, wczytuje wanie prekompilowany kod. Na pierwszy rzut oka wydaje si, e takie rozwizanie jest korzystne pod wzgldem
wydajnoci. W rzeczywistoci opisana strategia ma jednak wiele powanych wad.
Narzdzie Ngen tworzy obraz dla hipotetycznej architektury sprztowej, dziki czemu bdzie go mona uruchomi np. na dowolnym komputerze z procesorem x86. Zupenie inaczej dziaa kompilator JIT w rodowisku .NET, ktry dysponuje niezbdn wiedz o komputerze docelowym kompilacji i moe odpowiednio dostosowa podejmowane dziaania
41
optymalizacyjne. Efekt jest taki, e wersje generowane przez ten kompilator czsto przewyszaj pod wzgldem wydajnoci prekompilowane zestawy. Kolejn wad rdzennych obrazw jest ryzyko dezaktualizacji prekompilowanych zestaww wskutek zmian w konfiguracji sprztowej lub w systemie operacyjnym, np. w wyniku zainstalowania aktualizacji.
Dynamicznie kompilowane zestawy z reguy s pod wzgldem wydajnoci lepsze lub rwne
prekompilowanym plikom wykonywalnym wygenerowanym przez narzdzie Ngen.
Weryfikacja kodu
W ramach procesu kompilacji JIT wsplne rodowisko uruchomieniowe (CLR) przeprowadza dwa rodzaje weryfikacji: weryfikacj kodu jzyka poredniego oraz test poprawnoci metadanych. Celem tych dziaa jest sprawdzenie, czy odpowiedni kod faktycznie gwarantuje bezpieczestwo typw (ang. type safety). W praktyce chodzi o upewnienie si, e
typy parametrw w metodzie wywoujcej i metodzie wywoywanej s ze sob zgodne oraz
e wartoci zwracane przez dan metod s zawsze zgodne z typem zadeklarowanym w deklaracji tej metody. Krtko mwic, wsplne rodowisko uruchomieniowe (CLR) przeszukuje kod jzyka poredniego (IL) pod ktem zgodnoci wartoci przypisywanych do zmiennych z typami tych zmiennych; jeli zostanie wykryta niezgodno w tym zakresie, kompilacja
JIT zakoczy si wygenerowaniem stosownego wyjtku.
Kod generowany przez kompilator C# domylnie zapewnia bezpieczestwo typw. Istnieje
jednak sowo kluczowe unsafe, za pomoc ktrego moemy na poziomie programu napisanego w tym jzyku osabi restrykcje w zakresie dostpu do danych (wcznie z dopuszczeniem moliwoci stosowania odwoa wykraczajcych poza granice tablic).
Zalet takiej weryfikacji jest pewno, e wykonywanie danego kodu nie bdzie miao negatywnego wpywu na funkcjonowanie pozostaych aplikacji wskutek uzyskiwania dostpu
do pamici spoza przydzielonego obszaru. Oznacza to, e rodowisko CLR moe bezpiecznie uruchamia wiele aplikacji w ramach jednego procesu lub przestrzeni adresowej, co
z kolei przekada si na lepsz wydajno i niszy poziom wykorzystania zasobw systemu
operacyjnego.
Biblioteka klas platformy (FCL) jest zbiorem klas i innych typw (typw wyliczeniowych,
struktur i interfejsw), ktre s dostpne dla zarzdzanego kodu napisanego w dowolnym
jzyku zgodnym ze specyfikacj wsplnego rodowiska uruchomieniowego (CLR). Jest
to o tyle wane, e eliminuje znan z innych technologii konieczno wizania bibliotek
z konkretnymi kompilatorami. Programista, ktry raz zapozna si z typami udostpnianymi
przez t bibliotek, bdzie mg t wiedz wykorzystywa podczas pracy z dowolnym wybranym przez siebie jzykiem programowania zgodnym z technologi .NET.
42
Rysunek 1.8.
Fragment
danych wynikowych
wywietlonych
przez program
Ildasm lista
przestrzeni
nazw i typw
skadajcych si
na dany zestaw
Na rysunku 1.8 przedstawiono fragment danych wyjciowych wygenerowanych przez narzdzie Ildasm.exe na ich podstawie moemy przeanalizowa zawarto zestawu mscorlib.
Chocia zaprezentowana lista obejmuje tylko cz skadnikw tego zestawu, moemy si
przekona, e zestaw mscorlib zawiera niezwykle wan przestrze nazw System, ktra peni
funkcj repozytorium dla typw decydujcych o podstawowej funkcjonalnoci technologii
.NET. Zestaw mscorlib zawiera te przestrze nazw System.Collection, ktra jak sama
nazwa wskazuje obejmuje klasy i interfejsy wykorzystywane podczas przetwarzania kolekcji danych.
W tabeli 1.2 wymieniono kilkanacie najwaniejszych przestrzeni nazw biblioteki FCL platformy .NET. W ostatniej kolumnie zawarto numery rozdziaw tej ksiki, w ktrych znajdziesz przykady zastosowa odpowiednich przestrzeni nazw.
Przestrzenie nazw stanowi swoist map drogow dla programistw przegldajcych bibliotek FCL w poszukiwaniu niezbdnych klas i interfejsw. Przykadowo, jeli budowana
aplikacja ma wykorzystywa interfejs oparty na stronach WWW, zapewne najbardziej bd
nas interesoway typy przestrzeni nazw System.Web.*. Kiedy nauczysz si podstaw technologii .NET i zdobdziesz dowiadczenie w pracy z jzykiem programowania C#, odkryjesz,
e najwikszym wyzwaniem jest wanie zapoznawanie si z wbudowanymi typami zawartymi
w bibliotece klas platformy (FCL).
43
Zastosowania
Rozdzia
System
3., 18.
System.Collections
4.
11., 12.
System.Diagnostics
13.
System.Drawing
8., 9.
System.Globalization
5.
System.IO
5.
System.Net
17.
System.Reflection
System.Collections.Specialized
System.Collections.Generic
System.Data
System.Data.OracleClient
System.Data.SSlClient
System.Data.OleDb
System.Data.Odbc
System.Drawing.Drawing2D
System.Drawing.Printing
System.Drawing.Text
System.Reflection.Emit
System.Runtime.InterOpServices
8.
44
Zastosowania
Rozdzia
System.Security
5., 15.
System.Text.RegularExpressions
5.
System.Threading
13.
16., 17.,
18.
System.Security.Permissions
System.Security.Cryptography
System.Threading.Thread
System.Web
System.Web.Services
System.Web.UI
System.Web.UI.WebControls
System.Web.Security
6., 7.
System.Xml
10.
Zestaw narzdzi .NET Framework Software Development Kit (SDK) zawiera narzdzia, kompilatory i dokumentacj niezbdn do tworzenia oprogramowania, ktre bdzie prawidowo
dziaao na kadym komputerze z zainstalowan platform .NET Framework. Wersj instalacyjn dla systemw Windows XP, Windows 2000, Windows Server 2003 i wszystkich nowszych wersji systemu operacyjnego Windows mona pobra za darmo z witryny internetowej
firmy Microsoft (zajmuje okoo 100 megabajtw). Jeli masz ju zainstalowane rodowisko
Visual Studio .NET, nie bdziesz musia pobiera tego zestawu narzdzi, poniewa VS .NET
instaluje je automatycznie.
45
Uytkownicy oprogramowania zbudowanego z wykorzystaniem zestawu narzdzi .NET Framework SDK nie musz tego zestawu instalowa na swoich komputerach, powinni natomiast
dysponowa odpowiedni (zgodn) wersj platformy .NET Framework. Na witrynie internetowej firmy Microsoft3 udostpniono darmowy pakiet .NET Framework Redistributable
(zajmuje ponad 20 megabajtw) naley go zainstalowa na wszystkich komputerach,
ktrych uytkownicy bd korzystali z aplikacji opracowanych w technologii .NET. Poza
systemami wymienionymi przy okazji omawiania zestawu narzdzi SDK pakiet .NET Framework Redistributable mona instalowa take w systemach Windows 98 i Windows ME.
Aplikacje .NET bd z drobnymi wyjtkami dziaay identycznie we wszystkich platformach systemw operacyjnych, poniewa ich docelowym otoczeniem jest wsplne rodowisko uruchomieniowe (CLR), a nie system operacyjny. Przed zainstalowaniem pakietu .NET
Framework Redistributable powinnimy si upewni, e nasz system spenia wymagania opisane na witrynie internetowej firmy Microsoft i dotyczce midzy innymi zainstalowanej
przegldarki internetowej Internet Explorer 5.01 lub nowszej.
46
Wiele z tych zada bardziej lub mniej szczegowo omwimy w kolejnych rozdziaach.
Warto jednak mie wiadomo istnienia narzdzi, ktre uatwiaj wykonywanie odpowiednich dziaa sztuk efektywnego korzystania z czci tych narzdzi (szczeglnie tych
wspierajcych przegldanie klas i zestaww) naley opanowa ju na wczesnych etapach
poznawania technologii .NET.
W tabeli 1.3 wymieniono i krtko opisano kilka najbardziej przydatnych narzdzi platformy .NET Framework, ktre uatwiaj wytwarzanie i wdraanie aplikacji. Trzy narzdzia,
Ildasm.exe, wincv.exe i .NET Framework Configuration szczegowo omwimy w dalszej
czci tego rozdziau.
Wiele spord opisanych powyej katalogw znajduje si w nastpujcym podkatalogu zestawu narzdzi .NET Framework SDK:
c:\Program Files\Microsoft.NET\SDK\v2.0\Bin
Uruchamianie wymienionych przed chwil narzdzi w wierszu polece systemu operacyjnego Windows (z dowolnego katalogu) wymaga w pierwszej kolejnoci dopisania cieki do
odpowiednich plikw wykonywalnych w zmiennej systemowej Path. Aby to zrobi, naley
wykona nastpujce kroki:
1. Kliknij prawym przyciskiem myszy ikon Mj komputer i z wywietlonego
47
Opis
Al.exe
Assembly Linker
Fuslogvw.exe
Assembly Binding Log Viewer
Gacutil.exe
Narzdzie Global Assembly
Cache
Ildasm.exe
MSIL Disassembler
Mscorcfg.msc
Narzdzie .NET Framework
Configuration
Ngen.exe
Native Image Generator
Sn.exe
Narzdzie Strong Name
wincv.exe
Windows Forms Class Viewer
Wsdl.exe
Narzdzie Web Services
Description Language
Jeli masz zainstalowane rodowisko Visual Studio, duo prostszym rozwizaniem bdzie
uycie prekonfigurowanego wiersza polece tego rodowiska. Wiersz polece rodowiska
VS.NET automatycznie inicjalizuje informacje o ciekach, ktre s niezbdne do uzyskiwania dostpu do narzdzi wiersza polece.
Ildasm.exe
Narzdzie Intermediate Language Disassembler (Ildasm), ktre jest czci zestawu narzdzi .NET Framework SDK, zwykle znajduje si w podkatalogu Bin w katalogu, w ktrym
zainstalowano ten zestaw narzdzi. Narzdzie Ildasm jest bezcenn pomoc podczas analizy rodowiska zestaww platformy .NET i jako takie bdzie jednym z pierwszych narzdzi,
z ktrym bdziesz si musia zaznajomi ju na pocztku swojej przygody z zestawami .NET.
48
Opcjonalny przecznik /adv powoduje, e bd dostpne zaawansowane opcje wywietlania. Wykonanie tego polecenia wywoa graficzny interfejs uytkownika (GUI) z menu File,
w ktrym bdziemy mogli wybra interesujcy nas zestaw. Warto pamita, e narzdzie
Ildasm nie otwiera plikw skadowanych w pamici podrcznej zestaww (GAC).
Na rysunku 1.9 przedstawiono przykad danych wyjciowych wywietlonych przez narzdzie Ildasm po wybraniu jednego z zestaww. Zawarto zestawu jest prezentowana w czytelnym, hierarchicznym formacie zawierajcym nazw zestawu, w tym przypadku corecsharp1,
oraz wszystkie jego skadniki.
Rysunek 1.9.
Zawarto
wybranego zestawu
wywietlona
przez narzdzie
Ildasm.exe
Uytkownik narzdzia moe wej w gb tej hierarchii, aby zapozna si z reprezentowanym przez poszczeglne skadniki kodem jzyka poredniego IL (lub wsplnego jzyka
poredniego CIL). Z rysunku 1.9 wynika, e zestaw corecsharp1 skada si z trzech
metod: Metric, conversion i metric. Potwierdza to oryginalny kod klasy Conversion napisany 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 wywietlenie ekranu z kodem jzyka poredniego (IL) tej metody patrz rysunek 1.10.
Narzdzie Ildasm moe by wykorzystywane do nauki i eksperymentowania z koncepcj
jzyka poredniego i zestaww. Program znajduje te wane zastosowania praktyczne.
Przypumy, e dysponujemy komponentem (zestawem .NET) opracowanym przez kogo
49
Rysunek 1.10.
Widok kodu jzyka
poredniego (IL)
innego, i e nie posiadamy adnej dokumentacji na jego temat. W takich przypadkach poszukiwanie szczegw na temat interfejsu tego zestawu powinnimy rozpocz wanie od
jego otwarcia w narzdziu Ildasm.
Narzdzie Ildasm zawiera w menu File opcj Dump, za pomoc ktrej moemy zapisa
dokumentacj programu w pliku tekstowym. Aby utworzy dugi, ale czytelny dokument
o metadanych danego zestawu, wybierz opcj Dump Metainfo; aby zapozna si z profilem zestawu wcznie z liczb bajtw wykorzystywanych przez poszczeglne skadniki,
wybierz opcj Dump Statistics.
50
wincv.exe
WinCV jest przegldark klas analogiczn do narzdzia Visual Studio Object Viewer oferowan w ramach rodowiska VS .NET. Program znajduje si w katalogu Program Files\
Microsoft.NET\SDK\V1.x\Bin i mona go uruchamia z poziomu wiersza polece. Po wywietleniu okna graficznego interfejsu uytkownika WinCV naley wpisa nazw interesujcej nas klasy w polu tekstowym Searching For (patrz rysunek 1.12).
WinCV oferuje bogaty zasb informacji o wszystkich typach obsugiwanych przez bibliotek klas bazowych. Cztery obszary zaznaczone na rysunku 1.12 pokazuj prbki dostpnych danych:
1. Przedmiotem analizy jest klasa bazowa System.Array.
2. Klasa System.Array jest czci zestawu mscorlib.dll. Wspominalimy ju, e zestaw
uprawnienia dostpu, typ oraz parametry definicja w tej postaci jest nazywana
sygnatur metody.
51
Rysunek 1.12. Przykad uycia narzdzia WinCV do przegldania definicji typu klasy Array
kliknij ikon Narzdzia administracyjne i wybierz skrt Microsoft .NET Framework Konfiguracja. Program Framework Configuration stworzono z myl o administratorach, ktrzy
musz wykonywa nastpujce zadania:
n
52
Rysunek 1.13.
Przykad
uycia narzdzia
konfiguracyjnego
aplikacji
do ustawiania
wersji zestaww
Jak wida, narzdzie konfiguracyjne stworzono przede wszystkim z myl o administratorach. Programici powinni korzysta tylko z wybranych podzbiorw funkcjonalnoci tego
narzdzia zawartych w trzech kreatorach: Dopasuj zabezpieczenia .NET, Ufaj zestawowi
oraz Napraw aplikacj. Dostp do tych kreatorw mona uzyska, klikajc ikon Microsoft
.NET Framework Kreatorzy w Narzdziach administracyjnych.
53
Wielu programistw piszcych zoone aplikacje dla platformy .NET wykorzystuje Visual Studio lub jakie inne zintegrowane rodowisko wytwarzania oprogramowania (ang. Integrated
Development Environment IDE) do edycji kodu, doczania zewntrznych zestaww,
diagnozowania aplikacji i generowania ostatecznych, skompilowanych wersji oprogramowania. Jeli i Ty zaliczasz si do tej grupy, znajomo technik korzystania z zestawu narzdzi .NET SDK i podstawowego kompilatora C# najprawdopodobniej nie bdzie Ci potrzebna,
cho z pewnoci podniosaby poziom wiedzy o procesie kompilacji w technologii .NET
i daa lepsze podstawy do pracy z zestawami. Efektem ubocznym korzystania z kompilatora
C# na poziomie wiersza polece byoby te zdobycie cennego dowiadczenia w korzystaniu
z programw wchodzcych w skad zestawu narzdzi SDK. Wiele spord narzdzi zaprezentowanych w poprzednim podrozdziale jest wywoywanych wanie z wiersza polece,
a w niektrych sytuacjach moliwo przeprowadzania procesu kompilacji w takim rodowisku okazuje si kuszc alternatyw dla zaawansowanych mechanizmw rodowisk IDE.
Na rysunku 1.14 przedstawiono podstawowe kroki skadajce si na proces konwertowania
kodu rdowego na ostateczn, skompilowan wersj oprogramowania. Celem niniejszego
podrozdziau jest prezentacja, jak edytor tekstu w poczeniu z kompilatorem C# moe by
wykorzystywany konstruowania aplikacji. Przy okazji przeanalizujemy wiele opcji kompilatora, ktre czsto pozostaj ukryte przed uytkownikami zintegrowanych rodowisk wytwarzania oprogramowania (IDE).
Rysunek 1.14.
Schemat procesu
kompilacji
Lokalizowanie kompilatora
Kompilator jzyka programowania C#, csc.exe, znajduje si w katalogu, w ktrym zainstalowano platform .NET Framework:
C:\winnt\Microsoft.NET\Framework\v2.0.40607
cieka do pliku wykonywalnego kompilatora moe si oczywicie rni w zalenoci od
stosowanego systemu operacyjnego i zainstalowanej wersji platformy .NET Framework.
Aby kompilator C# by dostpny w wierszu polece niezalenie od biecego katalogu,
54
clientlib.cs
using System;
public class ShowName
{
public static void ShowMe(string MyName)
{
Console.WriteLine(MyName);
}
}
55
Opis
/addmodule
/debug
/define
/delaysign
/doc
/keyfile
Okrela ciek do pliku .snk zawierajcego par kluczy niezbdn do silnego nazwania
danego zestawu (patrz rozdzia 15.).
/lib
/out
Okrela nazw docelowego pliku dla skompilowanej wersji. Nazwa domylna jest taka
sama jak dla pliku wejciowego (rozszerzenie .cs jest zastpowane rozszerzeniem .exe).
/reference (/r)
/resource
/target (/t)
manifestu.
/t:winexe kompiluje zestaw Windows Forms nazwany *.exe.
Na tym etapie nie ma znaczenia, czy rozumiesz szczegowe konstrukcje jzykowe wystarczy, e bdziesz wiedzia, e kod zawarty w pliku client.cs wywouje funkcj zdefiniowan w pliku clientlib.cs i wywietla otrzyman warto w oknie konsoli. Kompilator C#
oferuje wiele sposobw implementacji tego rodzaju zwizkw, ktre demonstruj nie tylko
podstawowe opcje kompilatora, ale te rzucaj nieco wiata na ogln koncepcj zestaww.
56
W wyniku tej operacji otrzymamy zestaw nazwany clientlib.dll. Moemy teraz skompilowa
kod klienta, stosujc polecenie odwoujce si do tego zewntrznego zestawu:
csc /r:clientlib.dll client.cs
Kompilator wygeneruje zestaw nazwany client.exe. Jeli przeanalizujesz ten zestaw za pomoc narzdzia Ildasm, przekonasz si, e jego manifest zawiera odwoanie do skompilowanego wczeniej zestawu clientlib.dll.
Plik wyjciowy zostanie nazwany clientlib.netmodule. Mona ten plik umieci w zestawie
client.exe za pomoc przecznika /addmodule kompilatora csc.exe:
csc /addmodule:clientlib.netmodule client.cs
Format PE definiuje ukad plikw wykonywalnych, ktre mona uruchamia w 32- i 64-bitowych
systemach Windows.
57
58
zestawu.
7. Jaka relacja czy przestrze nazw z zestawem .NET?
8. Rozwi i krtko opisz pojcia kryjce si za nastpujcymi akronimami: