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
Spis treci
Spis treci
Wstp
11
Zaczynamy
23
Jak zdoby C# ...........................................................................................24
Instalowanie IIS.........................................................................................26
Tworzenie projektu aplikacji sieciowej w Visual Studio .NET ................28
Uruchamianie projektw sieciowych za pomoc Visual Studio .NET........ 31
Pisanie prostej strony ASP .NET ..............................................................33
Wyszukiwanie bdw w aplikacjach ASP .NET .....................................35
Rczne uruchamianie kompilatora ............................................................38
Kompilowanie i uruchamianie programw C# bez pomocy VS.NET ........ 39
Wyszukiwanie bdw w programach bez pomocy VS.NET ...................41
Rozdzia 2.
Skadniki jzyka C#
43
Praca z elementami jzyka ........................................................................44
Pisanie kodu C#.........................................................................................48
Deklarowanie zmiennych ..........................................................................50
Definiowanie staych.................................................................................53
Grupowanie staych w typy wyliczeniowe................................................54
Deklarowanie funkcji ................................................................................56
Deklarowanie funkcji z parametrami ........................................................58
Zwracanie wartoci funkcji .......................................................................62
Definiowanie klas......................................................................................64
Dodawanie klas do przykadowej aplikacji...............................................67
Tworzenie i stosowanie obiektw .............................................................68
Tworzenie obiektw w przykadowej aplikacji.........................................70
Wczanie definicji klas ze rde zewntrznych......................................71
Grupowanie klas w przestrzeniach nazw ..................................................74
Dodawanie pl do klas ..............................................................................78
Inicjalizowanie pl w momencie ich deklarowania ...................................79
Dodawanie waciwoci do klas................................................................80
5
Spis treci
Rozdzia 1.
Spis treci
Spis treci
Rozdzia 4.
Cigi znakw
133
Przygotowanie komputera do pracy z cigami znakw ..........................135
Praca z cigami znakw ..........................................................................137
Inicjalizowanie cigw znakw ..............................................................140
Porwnywanie cigw znakw ...............................................................142
czenie cigw znakw.........................................................................145
Okrelanie dugoci cigu znakw ..........................................................147
Porwnywanie i czenie cigw znakw w przykadowej aplikacji........ 148
Tworzenie cigw z pojedynczych znakw ............................................151
Znaki specjalne........................................................................................154
Stosowanie cigw literaw...................................................................156
Dostp do poszczeglnych znakw cigu ...............................................158
Wyszukiwanie podcigw wewntrz cigw znakw ............................159
Pobieranie wycinka cigu........................................................................160
Dzielenie cigu znakw...........................................................................161
Skadanie cigw.....................................................................................163
Spis treci
Dziedziczenie klas
173
Rozdzia 6.
Skadowe specjalne
203
Typy
229
Dziaania z typami...................................................................................230
Uzyskiwanie typu klasy ..........................................................................234
Sprawdzanie zgodnoci typw ................................................................236
7
Spis treci
Spis treci
Spis treci
Rozdzia 8.
Interfejsy
249
Dziaania z interfejsami...........................................................................251
Definiowanie interfejsw ........................................................................255
Niejawna implementacja skadowych interfejsu .....................................257
Jawna implementacja skadowych interfejsu ..........................................260
Usprawnianie przykadowej aplikacji .....................................................261
Wykorzystanie obiektw poprzez interfejsy ...........................................268
Rozpoznawanie interfejsu .......................................................................269
Wykorzystanie interfejsw do polimorfizmu..........................................271
Interfejs bdcy pochodn innego interfejsu...........................................272
Refaktoryzacja.........................................................................................274
Ponowna implementacja interfejsw w klasie pochodnej.......................275
Koczymy przykadow aplikacj ..........................................................277
Rozdzia 9.
Tablice i kolekcje
279
Spis treci
Tworzenie stosw....................................................................................317
Tworzenie tabel mieszajcych.................................................................318
Przegldanie elementw tabel mieszajcych...........................................320
Koczymy przykadow aplikacj ..........................................................321
Testowanie kontrolki CodeGridWeb.......................................................323
Rozdzia 10. Delegaty i zdarzenia
325
353
Spis treci
Spis treci
Spis treci
10
439
Interfejsy
Interfejsy
Interfejsy
249
Interfejsy
Rozdzia 8.
Interfejsy
250
Interfejsy
Dziaania z interfejsami
Jako przykadow aplikacj w tym rozdziale
napiszemy modu ASP .NET. Nie bdzie
to aplikacja bardzo rozbudowana, ale za to bdzie
j mona wykorzysta w rzeczywistych
aplikacjach (w tym rozdziale nie bdzie aplikacji
dotyczcej supermenw).
251
Dziaania z interfejsami
Dziaania z interfejsami
Rozdzia 8.
Rozwizanie problemu jest nastpujce. Kiedy
klient zada strony po raz pierwszy, modu
zatrzyma danie i zwrci stron z odpowiednim
skryptem dziaajcym po stronie klienta.
Zadaniem skryptu bdzie okrelenie wymiarw
obszaru klienta. Skrypt zapisze wymiary
w ukrytym polu, a nastpnie zada natychmiast
tej samej strony, ktrej klient da poprzednio.
Wysanie skryptu dziaajcego po stronie klienta
i zwrcenie pierwotnie danej strony powinno
nastpi na tyle szybko, aby uytkownik niczego
nie zauway. Za drugim razem, gdy modu
otrzyma danie tej samej strony (teraz zada
jej skrypt dziaajcy po stronie klienta),
modu odnajdzie ukryte pola zawierajce
wymiary, utworzy niewielki obiekt sucy
do przechowywania potrzebnych informacji
i przekae je do danej strony. Strona pobierze
obiekt z informacjami i zwrci wynik do klienta,
ktry wykorzysta informacje o rozmiarze obszaru
klienta. W naszym przypadku na stronie wymiary
wywietlone zostan w polach tekstowych.
252
Interfejsy
7. Kliknij prawym klawiszem myszy formularz
253
Dziaania z interfejsami
Rozdzia 8.
Wskazwki
To, co do tej pory zrobilimy w przykadowej
Dziaania z interfejsami
254
Interfejsy
Tabela 8.1. Skadowe interfejsu (skadowe, ktre
mona wprowadzi do definicji interfejsu)
Definiowanie interfejsw
Nazwa
Przykad
Metoda
)EF8
Waciwo
C8D
Waciwo tylko
do odczytu
C8D
Indeks
H
IC86D
Zdarzenie
'
0
A8
a po nim spacj.
3. Wpisz nazw interfejsu.
4. Otwrz nawias klamrowy .
5. Wprowad definicje skadowych (tabela 8.1).
6. Zamknij nawias klamrowy ! (rysunek 8.5).
255
Definiowanie interfejsw
"'
C
1C8D,,waciwo tylko
,, do odczytu
E
F8,,metoda
G EF8,,metoda
D
Rozdzia 8.
Wskazwki
Wszystkie metody interfejsu z definicji s
(rysunek 8.7).
Definiowanie interfejsw
256
E
F
C
4&EF8
D
D
C
1C8D
,,waciwo tylko do odczytu
!E
F8,,metoda
!E
!(-K
F8
,,przecianie
D
Interfejsy
Rysunek 8.8. Implementacja interfejsu przypomina
dziedziczenie. W przypadku metody niejawnej
wystarczy zaimplementowa skadowe interfejsu
jako metody publiczne
!"'
C
1C8D
. E F8
D
$ %
&
C
! E
78
8
LLF
C
'
'
8
J
E
M
F8
D
D
D
publiczne.
4. Wpisz kod skadowych interfejsu
(rysunek 8.8).
257
6
C
" #
C
C
8
D
D
Niejawna implementacja
skadowych interfejsu
Rozdzia 8.
Wskazwki
Ten mechanizm implementacji interfejsu
C
1C8D
. E F8
D
!")
C
.-0
-E
K
"B
N F8
D
6' ("
C
" #
C
C
8
D
D
$ %
&
C
! E
78
8
LLF
C
'
'
8
J
E
M
F8
D
D
$ !%
" '
)
&
C
N E"B
N F
C
*A0 . E
F8
D
D
D
258
Interfejsy
Rysunek 8.10. W powyszym kodzie zdefiniowano
klas Person, ktra implementuje interfejs IHuman.
Nastpnie, biorc pod uwag to, e nie wszystkie
osoby s menederami, zdefiniowano klas
opisujc menederw. Jednak, ze wzgldu na to,
e menederowie s ludmi (persons), klasa
ta dziedziczy wszystkie skadowe klasy Person
(zasada dziedziczenia). Na kocu znajduje si
implementacja interfejsu IManager
!"'
C
1C8D
. E F8
D
!")
C
.-0
-E
K
"B
N F8
D
6"'
C
1
C
C
8
D
D
. E F
C
! E
78
8
LLF
C
'
'
8
J
E
M
F8
D
D
D
)
6*
' ("
259
Rozdzia 8.
Jawna implementacja
skadowych interfejsu
Podczas implementowania interfejsu przez
wprowadzanie skadowych publicznych
powstaje problem polegajcy na tym, e czasami
dwa interfejsy zawieraj metod o takiej samej
nazwie i takich samych parametrach,
ale konieczne jest zaimplementowanie tych
metod na dwa rne sposoby. W przypadku
zastosowania metody niejawnej jedna metoda
publiczna bdzie stanowia implementacj
metod o takiej samej nazwie i tym samym
zbiorze parametrw dla wszystkich interfejsw.
Metoda jawna umoliwia poinformowanie
kompilatora o tym, ktr metod, ktrego
interfejsu mielimy zamiar zaimplementowa.
interfejsu.
3. Wpisz $ %&
%.
Wskazwka
Wszystkie metody implementowane w ten
260
C
1C8D
. E F8
D
6"'
C
" +#
C
C
8
D
D
$ +%
&
C
! E
78
8
LLF
C
'
'
8
J
E
M
F8
D
D
D
Interfejsy
Usprawnianie
przykadowej aplikacji
261
Rozdzia 8.
Aby zdefiniowa
klas moduu uytkownika:
1. Z paska menu wybierz polecenie Project/
interfacesproject/custommodule/Bases and
interfaces. Kliknij prawym klawiszem myszy
IHttpModule i z rozwijanego menu wybierz
Add/Implement Interface (rysunek 8.13).
262
Interfejsy
Rysunek 8.14. Interfejs IHttpModule spenia
dwie funkcje. Po pierwsze, informuje rodowisko
ASP .NET, e klasa jest moduem uytkownika.
Po drugie, rodowisko zyskuje moliwo
poinformowania klasy, kiedy modu jest adowany
po raz pierwszy (metoda Init) oraz kiedy nie jest ju
potrzebny (metoda Dispose)
(rysunek 8.15).
.-8
.-8
! #
C
,,, -&
,
" (
$
%++- &
.
/
D
D
.-8
.-8
! #
C
,,, -&
,,, Oglny opis moduu custommodule
,,,, -&
6"')
C
EF
C
,,
,, DO ZROBIENIA: Tutaj naley wprowadzi
,,logik konstruktora
,,
D
"
!"')
"
E.-'
F
C
D
+EF
C
D
D
D
263
Rozdzia 8.
8. W metodzie wprowad kod wicy
zdarzenie *+,- z metod klasy
*+,- (rysunek 8.16). Nie martw si,
! #
C
,,, -&
0O
-P
,,,, -&
6"')
C
EF
C
,,
DO ZROBIENIA: Tutaj naley
,,wprowadzi logik konstruktora
,,
D
"
!"')
"
E.-'
F
C
+1"23 56
!$
%1"23&7
D
+EF
C
D
G
JQE#
K
F
C
D
D
D
264
Interfejsy
Rysunek 8.17. Doce pikno literaw znakowych.
Zwr uwag, jak atwo korzystajc z literaw
znakowych mona umieci znaki koca wiersza
w cigu znakw. Po prostu formatujemy cig
znakw, tak jak chcemy, umieszczajc gdzie naley
znaki koca wiersza
"
E.-'
F
C
G
JQL
N
'
EG
JQF8
" 6 89
:;
<+++
:
""6$
;
=0%&
0
0 "
265
Rozdzia 8.
10. Teraz, w treci metody *+,- wpisz
266
Interfejsy
Do tej pory nie uywalimy obiektu
, ale przypomina on obiekty oraz #.
Oglnie rzecz biorc, jest to jeszcze jeden sposb utrwalania informacji. Rnica midzy
tymi obiektami polega na czasie dostpnoci informacji. W obiekcie
informacje s
dostpne tylko na czas trwania dania klienta. W przypadku obiektu # informacje
s dostpne tak dugo, jak serwer WWW przetwarza aplikacj i maj do nich dostp wszystkie
klienty korzystajce z aplikacji. Informacje zapisane w obiekcie s dostpne na czas
trwania programu, ale s one specyficzne dla kadego klienta. Obiekt
istnieje tylko
na czas dania. Jeeli zatem klient przechodzi z jednej strony na drug, informacje zostaj
utracone. W ramach tego samego dania modu moe jednak umieci informacje
w obiekcie
i strona bdzie miaa do nich dostp przez odwoanie +&1&
.
267
Rozdzia 8.
Wykorzystanie obiektw
poprzez interfejsy
Kiedy programista zdefiniuje interfejs
i zaimplementuje go jako konkretn klas,
moe uywa tej klasy poprzez interfejs.
Wykorzystanie obiektw
Wskazwka
Nie mona tworzy egzemplarzy interfejsu.
268
Interfejsy
Rysunek 8.22. Zmienna obj jest typu object.
Oznacza to, e moe wskazywa na obiekt Cat
lub na obiekt Dog. Powyszy kod testuje zawarto
zmiennej obj przez sprawdzenie, czy obiekt obj
obsuguje interfejs IDog
!"
C
"
0N
EF8
D
!"+
C
*
(0N
EF8
D
6"+
C
D
0N
C
$
E##F
C
!E4 0"F
C
"+E"+F#8
*
(0N
EF8
D
D
D
Aby sprawdzi,
czy obiekt obsuguje interfejs:
1. Wpisz "7%""#+8, gdzie %
269
Rozpoznawanie interfejsu
.6"
C
D
Rozpoznawanie interfejsu
Rozdzia 8.
2. Wpisz instrukcj "75968. Jeeli
Rozpoznawanie interfejsu
270
Interfejsy
Rysunek 8.24. Zwr uwag, e typem parametru
metody Communicate jest IHuman. Do metody
mona przekaza dowolny obiekt, ktry implementuje
interfejs. Kada z trzech klas implementuje interfejs
w inny sposb. Metoda Communicate zwraca inny
cig znakw w zalenoci od przekazanego obiektu
!"
C
.AEF8
D
G-6"'
C
.AEF
C
244
8
D
D
$
6"'
C
.AEF
C
T-OP-VY-T-U S
ST-X
8
D
D
C
E
F
C
.AEF8
D
+ -*
EF
C
N 8
. %&8
N
EF8
$
! I
%&8
N
E
F8
G- 1%&8
N
EF8
D
D
271
Wykorzystanie interfejsw
.6"'
C
.AEF
C
T-SAU
N-A X
8
D
D
Wykorzystanie interfejsw
do polimorfizmu
Rozdzia 8.
272
Interfejsy
Rysunek 8.26. Zaimplementowanie obu interfejsw:
nadrzdnego i pochodnego jest tym samym,
co zaimplementowanie tylko interfejsu pochodnego,
poniewa interfejs pochodny zawiera wszystkie
skadowe interfejsu nadrzdnego
!"
C
.
Z( -EF8
D
!"
6"
C
+ -EF8
D
273
2 6*
.
AAimplementacja metod dla obu interfejsw:
AAIparent oraz IPresident
.
Z( -EF
C
D
Wskazwki
Rozdzia 8.
Refaktoryzacja
Refaktoryzacja (ang. refactoring) to mechanizm
wykorzystywany w programowaniu obiektowym
do dziaa z klasami i interfejsami. Polega
on na tym, e jeli dwie klasy speniajce
podobne funkcje maj wsplny kod, wwczas
ze wsplnego kodu tworzy si klas bazow,
a nastpnie, na podstawie tej klasy bazowej,
tworzy si podklasy. Podklasy zawieraj tylko
ten kod, ktry je od siebie odrnia1.
Refaktoryzacja
bazowej.
5. Teraz moesz wykorzysta klasy pochodne
Z treci tego akapitu nie wynika, czym naprawd jest refaktoryzacja. Jest to po prostu upraszczanie kodu,
czyli midzy innymi wydzielanie podklas przyp. tum.
274
Interfejsy
Rysunek 8.29. Klasa Dog implementuje interfejs
IAnimal. Klasa GreatDane jest pochodn klasy
Dog, a zatem przejmuje implementacj interfejsu
IAnimal. Jednak co zrobi, aby zaimplementowa
metod Speak interfejsu IAnimal inaczej ni
w implementacji Dog, a implementacj metody
Eat pozostawi bez zmian? W takiej sytuacji mona
ponownie zaimplementowa interfejs IAnimal
w klasie GreatDane i zmieni implementacj
wybranych metod
!"
C
.AEF8
EF8
D
"
EF
C
[M
8
D
D
2 +
6+K-
C
" -+%&
C
AN!M AN!M
8
D
D
275
+6"
C
"
.AEF
C
N!MN!M
8
D
Ponowna implementacja
interfejsw w klasie pochodnej
Rozdzia 8.
Wskazwka
Innym sposobem ponownej implementacji
EF
C
[M
8
D
D
2 +
6+
C
$
.AEF
C
00$M00$M
8
D
D
276
Interfejsy
Rysunek 8.31. rodowisko ASP .NET przed
rozpoczciem aplikacji odczytuje ustawienia
w pliku web.config. Ustawienia w tym pliku mona
wykorzysta w celu zarzdzania sposobem
uruchamiania aplikacji przez system ASP .NET
) &
+
-
! # K
! #
,&
,) &
Koczymy przykadow
aplikacj
Pozostao jedynie kilka czynnoci, ktre trzeba
wykona, aby nasza aplikacja staa si w peni
funkcjonalna. W tym podrozdziale uzupenimy
pozostay kod.
Najpierw upewnimy si, e rodowisko
ASP .NET wie o module uytkownika.
277
Rozdzia 8.
To wszystko, co trzeba zrobi, aby uaktywni
modu uytkownika dla naszej aplikacji.
Nastpny krok polega na wprowadzeniu kodu
na stronie dimensions.aspx, aby upewni si,
czy modu dziaa.
278