Académique Documents
Professionnel Documents
Culture Documents
CWICZENIA
Czas
na
ub ie cl
Main()
Consoe.
01d
se
ca
rite ne
Ksigarnia internetowa
Oce ksik
Spis treci
Wstp
Cz I
Jzyk programowania
Rozdzia 1.
Pierwsza aplikacja
11
Jzyk C#
Jak waciwie nazywa si ten jzyk?
rodowisko uruchomieniowe
Narzdzia
Najprostszy program
Kompilacja i uruchamianie
Visual C# Express
Dyrektywa using
11
12
12
14
14
15
19
23
25
Typy danych
Typy arytmetyczne
Typ bool (Boolean)
Deklarowanie zmiennych
Nazewnictwo zmiennych
Typy odnonikowe
Typ string
Typ object
Warto null
Operatory
Operatory arytmetyczne
Operatory bitowe
25
25
27
28
32
33
34
34
35
35
36
43
Rozdzia 2.
C#
w i cz e n i a
Operatory logiczne
Operatory przypisania
Operatory porwnania (relacyjne)
Operator warunkowy (?)
Pozostae operatory
Priorytety operatorw
Komentarze
45
45
46
47
48
48
49
Instrukcje
51
Instrukcje warunkowe
Instrukcja if... else
Instrukcja if. .. else if
Instrukcja switch
Ptle
Ptla for
Ptla while
Ptla do . . . while
Ptla f oreach
Instrukcja goto
Wprowadzanie danych
Argumenty wiersza polece
Instrukcja ReadLine
51
51
55
57
59
59
66
68
70
70
73
74
80
Cz li
Programowanie obiektowe
89
Rozdzia 4.
Klasy i obiekty
91
Rozdzia 3.
Rozdzia 5.
Klasy
Metody
Konstruktory
Specyfikatory dostpu
Dziedziczenie
91
94
103
107
114
Tablice
119
Deklarowanie tablic
Inicjalizacja tablic
Rozmiar tablicy
Ptla foreach
Tablice wielowymiarowe
120
122
124
127
130
S p i s t reci
Rozdzia 6.
137
Obsuga bdw
Blok try.catch
Hierarchia wyjtkw
Wasne wyjtki
137
143
148
151
Interfejsy
155
Prosty interfejs
Interfejsy w klasach potomnych
Czy to interfejs?
Rzutowanie
Sowo kluczowe as
Sowo kluczowe is
155
159
167
172
174
175
Cz Ili
Programowanie w Windows
177
Rozdzia 8.
Pierwsze okno
179
Utworzenie okna
Wywietlanie komunikatu
Zdarzenie ApplicationExit
179
184
185
Delegacje i zdarzenia
187
Delegacje
Zdarzenia
187
192
Rozdzia 7.
Rozdzia 9.
Rozdzia 1 O. Komponenty
Etykiety (Label)
Przyciski (Button)
Pola tekstowe (TextBox)
Pola wyboru (CheckBox, RadioButton)
Listy rozwijane (ComboBox)
Listy zwyke (ListBox)
Menu
Menu gwne
Menu kontekstowe
Waciwoci Menu
Skrty klawiaturowe
197
197
203
206
211
217
220
224
224
232
235
240
C#
w i cz e n i a
Wstp
Czy warto poznawa C#? To pytanie zadaje sobie bardzo
wielu programistw na caym wiecie . Jzyk ten jest mocno
promowany przez firm Microsoft, gdzie powstay jego pierw
sze specyfikacje i implementacje, ale nawet osoby, ktre nie przepadaj
za t firm, przyznaj, e C# jest udanym produktem. Co wicej, jest
na tyle podobny do c + + i Javy, e programici znajcy oba te jzyki
od razu go polubi. Z kolei wszyscy ci, ktrzy dopiero rozpoczynaj
swoj przygod z programowaniem, dostan do dyspozycji jzyk prost
szy do nauki ni wspomniane C + + , przy czym w tym przypadku
prostszy" wcale nie oznacza o mniejszych moliwociach" . Co wicej,
jeli kto nauczy si C# jako pierwszego jzyka, nie b dzie mia
trudnoci z pniejszym poznaniem c + + czy Javy.
'
rynku.
C#
w i cz e n i a
I
Jzyk p rog ra mowa n i a
1o
C#
w i cz e n i a
1
Pie rwsza a p l i ka cja
Jzyk C#
Jzyk C# zosta opracowany w firmie Microsoft i wywodzi si z rodziny
CIC + + , cho zawiera rwnie wiele elementw znanych programi
stom Javy, takich jak np . mechanizmy automatycznego odzyskiwania
pamici. Programici korzystajcy na co dzieli z wymienionych jzy
kw programowania bd si czuli doskonale w tym rodowisku .
Z kolei dla osb nieznajcych C# nie bdzie on trudny do opanowa
nia, a na pewno duo atwiejszy ni tak popularny C + + .
Gwnym twrc C# jest Anders Hejlsberg, czyli nie kto inny jak
projektant produkowanego niegdy przez firm Borland pakietu Delphi,
a take Turbo Pascala ! W Microsofcie Hejlsberg rozwija m.in. ro
dowisko Visual J + + . To wszystko nie pozostao bez wpywu na naj
nowszy produkt, w ktrym mona dojrze wyrane zwizki zarwno
z C i C + + , jak Jav i Delphi, czyli Object Pascalem.
C# jest w peni obiektowy (zorientowany obiektowo), zawiera wspo
mniane ju mechanizmy odzyskiwania pamici i obsug wyjtkw.
Jest te cile powizany z rodowiskiem uruchomieniowym .NET,
co - oczywicie - nie znaczy, e nie mog powstawa jego imple
mentacje przeznaczone dla innych platform. Oznacza to jednak, e
doskonale sprawdza si w najnowszym rodowisku Windows oraz
w sposb bezporedni moe korzysta z klas .NET, co pozwala na
szybkie i efektywne pisanie aplikacji.
12
C#
w i cz e n i a
R o zd z i a 1.
P i e rwsza a p l i k a c j a
13
. entrypoi n t
li Code
. maxstack 3
. l oc a l s i n i t ( i nt32 V O . i n t32 V 1 . i n t32 V 2 . fl oat64 V 3 . fl oat64 V 4 .
obj ect [ J V_5 )
IL 0 0 0 0: l dc . i 4 . l
I L 0 0 0 1 : St l OC . 0
-5
I L 0 0 0 2 : l dc . i 4 . s
IL 0 0 0 4 : s t l oc . l
I L 0 0 0 5 : l dc . i 4 . 4
I L 0 0 0 6 : st l OC . 2
I L_0 0 0 7 : l dstr bytea rray ( 50 O O 6 1 O O 72 O O 6 1 O O 60 O O 65 O O 74 O O 72
OO 79 OO 20 O O 72 OO F3 OO 77 OO 6E OO 6 1 OO 6E OO 69 OO 6 1 OO 3A O O OA 00 )
I L_O O O c : c a l l voi d [mscorl i bJ System . Con s o l e : : W ri teLi n e ( st r i n g )
}
Nie jest on moe na pierwszy rzut oka zbyt przejrzysty, ale osoby
znajce np . asembler z pewnoci dostrzeg spore podobie11Stwa. Na
szczcie, przynajmniej na pocztku przygody z C#, nie trzeba schodzi
na tak niski poziom programowania. Moliwo obejrzenia kodu po
redniego moe by jednak przydatna np . przy wyszukiwaniu bdw
we wsppracujcych ze sob komponentach.
Najwaniejsze w tej chwili jest to, e aby uruchomi program napisany
w C#, musimy mie zainstalowany pakiet .NET Framework, ktry
potrafi poradzi sobie z kodem porednim oraz zawiera biblioteki
z definicjami przydatnych klas .
2
14
C#
w i cz e n i a
Na rzdzia
Najpopularniejszym rodowiskiem programistycznym sucym do
tworzenia aplikacji C# jest - oczywicie - produkowany przez
firm Microsoft pakiet Visual C # . Jest on dostpny jako oddzielny
produkt, jak rwnie jako cz pakietu Visual Studio . Wszystkie
prezentowane w tej ksice przykady mog by tworzone przy uyciu
tego wanie produktu (a take produktw niezalenych, takich jak
Mono czy DotGNU) . Korzysta mona z darmowej edycji Visual C#
Express dostpnej pod adresem http://www.microsoft.com/express.
Istnieje rwnie darmowy kompilator C# (csc .exe), bdcy czci
pakietu .NET Framework (pakietu tego naley szuka pod wspomnia
nym ju adresem http:// www.microsoft.com/net lub http://msdn .microsoft.
com/netframework/). Jest to kompilator uruchamiany w wierszu pole
cef1, nie oferuje wic dodatkowych udogodniefl przy budowaniu
aplikacji, tak jak Visual Studio, jednak do naszych celw jest cako
wicie wystarczajcy.
Co wicej, wanie ten kompilator zaprezentowano podczas wyko
nywania wicze. Bdzie tak przede wszystkim dlatego, e kiedy nie
korzysta si z wizualnych pomocy (szczeglnie przy tworzeniu aplikacji
z interfejsem graficznym) , atwiej zrozumie zalenoci wystpujce
w kodzie oraz zobaczy, w jaki sposb realizowanych jest wiele me
chanizmw jzyka, takich jak np . zdarzenia . Oczywicie, jeli kto
woli korzysta z Visual C#, moe posugiwa si tym narzdziem.
R o zd z i a 1.
{
P i e rwsza a p l i k a c j a
15
{
//tutaj instrukcje do wykonania
WICZENIE
Pierwszy program
Plik ten mona zapisa na dysku pod nazw program .es. Oczywicie,
moliwe jest rwnie nadanie innej , praktycznie dowolnej nazwy
(np . aplikacja .es).
Wielko liter
16
C#
w i cz e n i a
Uruchamianie
g
;;;;
p
.Qtwrz:
[ml
...1
OK
][
Anuluj
][
E.rzegldaj.
R o zd z i a 1.
P i e rwsza a p l i k a c j a
17
Oto przykad :
c : \wi n dows \ M i c rosoft . N ET\ Framewo r k \ v4 . 0 . 30 3 19\ c s c . exe program . e s
wersja
okrela wersj
18
C#
iii
w i cz e n i a
C:\Windows\system32\cmd.exe
Forma
skrcona
/out :
Parametr
Znaczenie
nazwa pliku
Nazwa pliku
wynikowego,
domylnie jest to
nazwa pliku z kodem
rdowym.
/ta rget :
/t :
exe
Tworzy aplikacj
konsolow.
/ta rget :
/t :
wi nexe
Tworzy aplikacj
okienkow.
/ta rget :
/t :
l i b r a ry
Tworzy bibliotek.
/ p l atform :
/p :
x8 6, I t a n i urn, x64,
anycpu
Okrela platform
sprztowo-systemow
dla ktrej ma by
generowany kod.
Domylnie jest o kada
platforma (anycpu).
/ recu r s e :
ma s k a
Komplikuje wszystkie
pliki ( z katalogu
biecego oraz
katalogw podrzdnych),
ktrych nazwa jest
zgodna z mask.
n a zwa p l i k u
Docza do pliku
wynikowego podan
ikon.
R o zd z i a 1.
P i e rwsza a p l i k a c j a
19
Forma
skrcona
/debug
Parametr
Znaczenie
+lub -
Wcza ( +)
oraz wycza (- )
generowanie
informacji dla
debuggera.
/opt1 m 1 ze
Io
+lub -
Wcza ( +)
oraz wycza (- )
optymalizacj kodu.
/ 1 ncrementa l
/1 ncr
+lub -
Wcza ( +)
oraz wycza (- )
kompilacj
przyrostow.
/wa rn a s error
Wcza tryb
traktowania ostrzee
jako bdw.
/wa rn :
/w :
od O do 4
Ustawia poziom
ostrzee.
/ n owa rn :
lista ostrzee
Wycza generowanie
podanych ostrzee.
/hel p
I?
/ n o l ogo
C#
20
WICZENIE
w i cz e n i a
\!l
References
program.es
pakiecie Visual
R o zd z i a 1.
P i e rwsza a p l i k a c j a
21
Sort by:
Installed Te m piates
Default
Type:
Visual (# ltems
ADO.NET EntityObject G. Visual C# ltems
Oni me Templates
Visual C# Items
A blank
C# code file
Visual('# ltems
I EJ
ame:
Code File
Visual C# ltems
DataSet
Visual C# !tenis
progr.am.c.s
22
C#
WICZENIE
w i cz e n i a
!'_dit
lf_iew
Eroject
.S.uil'd
JO "'-l
Qebug
-
D9_ta
Iools
- "' -
!::!elp
OJ.;'Jc:;;J : : C'
Busing system;
usi ng System.Collections.Generic;
I{
I
El
!fil ConsoleApplicatiorntI
Bnamespace ConsoleApplicationl
El
1/- X
Properties
References
Program,cs
class Program
} }
args)
R o zd z i a 1.
P i e rwsza a p l i k a c j a
23
Dyrektywa usi ng
We wszystkich dotychczasowych wiczeniach na pocztku kodu pro
gramu pojawiaa si dyrektywa us i ng System . Oznacza ona, e program
bdzie korzysta z klas zdefiniowanych w przestrzeni nazw System .
Przypomina to nieco instrukcj i mpo rt znan z Javy. Dziki takiemu
zapisowi kompilator wie", gdzie ma szuka klasy Conso l e i metody
Wri tel i ne, ktre wykorzystalimy do wywietlenia napisu na ekranie .
24
C#
w i cz e n i a
2
Zm ien ne i typy d a nych
Typy da nych
Zmienna to miejsce w programie, w ktrym mona przechowywa
jakie dane, np . liczby czy cigi znakw. Kada zmienna ma swoj
nazw, ktra j jednoznacznie identyfikuje, oraz typ okrelajcy, jakiego
rodzaju dane moe ona przechowywa . Przykadowo zmienna typu
i nteger moe przechowywa liczby cakowite, a zmienna typu fl oat
liczby rzeczywiste .
Typy arytmetyczne
Typy arytmetyczne, bdce podzbiorem typw prostych, mona po
dzieli na typy cakowitoliczbowe (ang . integral types) oraz typy
zmiennoprzecinkowe (zmiennopozycyjne, ang. floating-point types).
C#
26
w i cz e n i a
s byte,
byte,
c h a r,
s ho rt,
us hort,
i nt,
u i nt,
l ong,
ul ong .
Znaczenie
sbyte
od- 1 28 do 1 27
8-bitowa liczba
ze znakiem
by te
char
od O do 2 5 5
u+oooo to u+FFFF
8-bitowa liczba
bez znaku
1 6-bitowy znak
Unicode
s h ort
u s hort
1 nt
u1 nt
od - 3 2 7 68 (- 215 ) do 3 2 7 67 ( 215- 1)
od O do 65 5 3 5 ( 216 - 1)
od - 2 1 47 48 3 648 (- 231 )
1 6-bitowa liczba
ze znakiem
1 6-bitowa liczba
bez znaku
3 2-bitowa liczba
do 2 1 47 48 3 647 ( 231- 1)
ze znakiem
od O do 4 29 4 9 67 29 5 ( 232 - 1)
3 2-bitowa liczba
bez znaku
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
27
cig dalszy
Nazwa typu
Znaczenie
l ong
od -9 2 2 3 37 2 0 3 6 8 5 4 77 5 8 08
64-bitowa liczba
ze znakiem
( 263_ 1)
ul ong
od O do 18 4467 44 07 3 7 09 5 5 1 61 5
64-bitowa liczba
bez znaku
Typ c h a r suy do reprezentacji znakw, przy czym w C# jest on 16bitowy i zawiera znaki Unicode ( Unicode to standard pozwalajcy na
zapisanie znakw wystpujcych w wikszoci jzykw wiata) . Po
niewa kod Unicode to nic innego jak 1 6-bitowa liczba, zosta zali
czony do typw arytmetycznych cakowitoliczbowych .
Typy zmiennoprzecinkowe wystpuj tylko w trzech odmianach:
o
fl oat,
doubl e,
dec i ma l .
fl oat
od - 3 I 4x 1 038do + 3 I 4x 1 038
doubl e
od 5,0 X 1 0-324 do
dec i ma l
0
1 ,7 X 1 03 8
Precy zja
7 miejsc po przecinku
1 5 I ub 1 6 cyfr
28 lub 29 cyfr
C#
28
w i cz e n i a
O:
//instrukcje
R o z d z i a 2.
WICZENIE
Zm i e n n e i t y p y d a n y ch
29
i n t pi erwszali czba ;
i n t drugal i czba ;
pi erws z a l i czba
10 ;
drugal i czba
20 ;
Con sol e . Wr i teli n e ( " P i erwsza l i czba : " + pi erws z a l i czba ) ;
Con sol e . Wr i tel i n e ( " D ruga l i czba : " + d ruga li czba ) ;
=
111 C:\Windows\system32\cmd.exe
warto ;
C#
30
w i cz e n i a
warto2 :
i n t pi erwszali czba
10 ;
i n t drugal i czba
20 ;
Con sol e . Wr i teli n e ( " P i erwsza l i czba : " + pi erws z a l i czba ) ;
Con sol e . Wr i tel i n e ( " D ruga l i czba : " + d ruga Li czba ) ;
=
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
31
WICZENIE
i n t pi erwszali czba
10 , druga l i czba
20 , i , j , k ;
Con sol e . Wr i teli n e ( " p i erws z a l i czba : " + p i e rwsza l i czba ) :
Con sol e . Wr i teli n e ( " d ruga l i czba : " + drugal i czba ) ;
Con sol e . Wr i teli n e ( "zmi enn a i : " + i ) ;
Con sol e . Wr i teli n e ( "zmi enn a j : " + j ) ;
Con sol e . Wr i teli n e ( "zmi enn a k : " + k ) ;
=
C#
32
WICZENIE
w i cz e n i a
lnicjalizacja zmiennych
i n t pi erwszali czba
10 , druga l i czba
20 , i , j , k
i
o;
j
o;
k
O;
Con sol e . Wr i teli n e ( " p i erws z a l i czba : " + p i e rwsza l i czba ) ;
Con sol e . Wr i teli n e ( " d ruga l i czba : " + drugal i czba ) ;
Con sol e . Wr i teli n e ( "zmi enn a i : " + i ) ;
Con sol e . Wr i teli n e ( "zmi enn a j : " + j ) ;
Con sol e . Wr i tell n e ( "zmi enn a k : " + k ) ;
=
ii C:\Windows\system32\cmd.exe
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
33
lub :
typ_zmi ennej nazwa_zmi ennej_l . nazwa_zmiennej_2 . nazwa_zmi ennej_3 ;
C#
34
w i cz e n i a
i n t [ ] tab l i ca ;
Typ stri ng
Typ stri ng suy do reprezentacji ai1cuchw znakowych, inaczej
napisw. Jeli chcemy umieci w programie acuch znakw, napis,
naley go uj w cudzysw, czyli na jego pocztku i kocu umieci
znaki cudzysowu, np . :
"To j e s t n ap i s "
Typ object
Typ object jest typem nadrzdnym, z ktrego wyprowadzone s
wszystkie inne typy danych. Nazwa object jest aliasem dla typu Object
zdefiniowanego w przestrzeni nazw System (System . Obj ect) . Nie b
dziemy zagbia si w niuanse wewntrznej realizacji typw w C#,
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
35
10 . ToSt ri n g ( ) ;
Wa rto n u l l
Jest to pewien specjalny typ danych, ktry oznacza po prostu nic
(nul l ) . Wartoci te uywane s, gdy trzeba wskaza, e dana zmienna
referencyjna jest pusta, czyli nie zosta do niej przypisany aden
obiekt. Typ nul l wystpuje w wikszoci obiektowych jzykw pro
gramowania, w Object Pascalu (jzyku, na ktrym oparte jest rodo
wisko Delphi) zamiast nul l stosuje si sowo ni l .
O peratory
Poznalimy ju zmienne, musimy jednak wiedzie, jakie moemy
wykonywa na nich operacje . Operacje s wykonywane za pomoc
rnych operatorw, np . odejmowania, dodawania, przypisania itd .
Operatory te mona podzieli na nastpujce grupy:
D
arytmetyczne ,
bitowe,
logiczne,
przyp1san1a,
porwnania,
pozostae .
C#
36
w i cz e n i a
C#
Dzielenie
Dodawanie
Odejmowanie
++
l nkrementacja ( zwikszanie)
Dekrementacja ( zmniejszanie)
WICZENIE
i nt a . b . c ;
a = 10 ;
b = 25 ;
c = b - a;
Con sol e . Wr i teli n e ( " a = " + a ) ;
Con sol e . Wr i teli n e ( " b = " + b ) ;
Con sol e . Wr i teli n e ( " b - a = " + c ) ;
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
37
c = a * b:
Con sol e . Wr i tell n e ( " a * b = " + c ) ;
Dzielenie modulo
i nt a . b , c :
a = 10 ;
b = 25 ;
c = b % a;
Con sol e . Wr i teli n e ( " b % a = " + c ) ;
Con sol e . Wr i teli n e ( " l l % 3 = " + 1 1 % 3 ) ;
c = a * b;
Con sol e . Wr i tell n e ( " ( a * b ) % 120 = " + c % 120 ) ;
C#
38
w i cz e n i a
Operator inkrementacji
{
/*] */
1*2 *1
1*3 *I
1*4 *1
1*5 *1
1*6 *1
1*7 *1
1*8 *1
1. y;
i nt X
Con sol e . W r i tel i n e ( ++x ) :
Con so l e . W r i tel i n e ( x++ ) :
Con sol e . W r i tel i n e ( x ) :
y
x++ :
Con so l e . W r i tel i n e ( y ) :
y
++x :
Con sol e . W r i tel i n e ( ++y ) :
=
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
39
Operator dekrementacji
I* I */
1*2 *1
1*3 *1
1*4 *1
/*5 */
1*6 *1
/*7*/
1*8 *1
i nt X = l , y ;
Con sol e . W r i tel i n e ( - - x ) ;
Con sol e . W r i tel i n e ( x - - ) ;
Con sol e . W r i tel i n e ( x ) ;
y = X- - ;
Con so 1 e . W r i tel i n e ( y ) ;
y = - -x ;
Con sol e . W r i tel i n e ( - -y ) ;
C#
40
w i cz e n i a
Dzielenie cakowitoliczbowe
i nt
a
b
c
=
a. b. c;
8;
3;
2;
R o z d z i a 2.
Con sol e . Wr l tell n e ( " a
Con sol e . Wr l tell n e ( " b
Con sol e . Wr l tel1 n e ( " c
Con sol e . Wr l tell n e ( " a
Con sol e . Wr l tell n e ( " a
Con sol e . Wr l tell n e ( " b
=
=
=
I
I
I
Zm i e n n e i t y p y d a n y ch
41
" + a) :
" + b) :
" + c) :
b = " + a I b) :
c = " + a I c) ;
c = " + b I c) ;
sbyte zm1 en n a ;
zm1 enna = 1 28 ;
Con sol e . Wr l tell n e ( "zm1 enn a = " + zm1 en n a ) ;
42
C#
w i cz e n i a
sbyte zmi en n a :
zmi enna = 1 2 7 :
zmi enna++ :
Con sol e . Wr i teli n e ( "zmi enn a = " + zmi en n a ) :
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
43
,,
"
z ak r e s
127
typu
128
129
s byte
sy stem dziesitny
10
11
1 00
C#
44
w i cz e n i a
ciqg dalszy
sy stem dwjkow y
sy stem dziesitny
1 01
1 1o
111
1 000
1 001
1 01 0
10
1 01 1
11
1 1 oo
12
1 1 01
13
1 1 1o
14
1111
15
Sy mbol w C#
bitowe AND
&
bitowe OR
bitowe XOR
bitowa negacja
przesunicie bitowe w lewo
<<
>>
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
45
C#
46
w i cz e n i a
Argument1
Operator
X
X
+=
Argument2
Znaczenie
= y
+ y
*=
* y
/=
I y
%=
% y
&=
& y
i=
A
I y
A y
<<=
<< y
>>=
>> y
Operator
Opis
Zwraca true , jeli argumenty s sobie rwne.
!=
>
<
>=
<=
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
47
Zapis ten naley rozumie tak: jeeli wa runek jest prawdziwy, wyra
enie przybiera wa rtoI , w przeciwnym przypadku
wa rto2. Aby
lepiej sobie to uzmysowi, wykonamy proste wiczenie .
-
WICZENIE
i nt X = l , y ;
y = ( X == 1 ) ? 1 0 : 20 ;
Con sol e . Wr i teli n e ( "y = " + y ) :
48
C#
w i cz e n i a
Pozostae operatory
Oprcz operatorw wymienionych wczeniej, w jzyku C# wyst
puje jeszcze kilkanacie innych, ktrych dokadne omwienie wy
kracza poza ramy tej ksiki. Zostay one jednak uwzgldnione w ta
beli w punkcie Priorytety operatorw" .
Operatory
Sy mbole
+, - , 1 , - , ++, - - , ( ), s i zeof
*, I , %
dodawanie, odejmowanie
+' -
przesunicia bitowe
<< , >>
porwnania
== I I. =
bitowe AND
&
R o z d z i a 2.
Zm i e n n e i t y p y d a n y ch
49
cig dalszy
Operatory
Sy mbole
bitowe XOR
bitowe OR
logiczne AND
&&
logiczne OR
1 1
??
warunkowy
przypisania, lambda
Komenta rze
Komentowanie tekstu rdowego programu jest wane ze wzgldu na
zachowanie przejrzystoci. Zaniechanie tej czynnoci powoduje zwy
kle, e sam programista po pewnym czasie musi powici duo czasu
na analizowanie wasnego kodu. Oczywicie, w krtkich programach,
takich jakie prezentowane s w tej ksice, zazwyczaj nie trzeba uywa
komentarzy, naley jednak wiedzie, w jaki sposb mona je stosowa .
W C# istniej dwa sposoby zastosowania komentarza. Oba zapoy
czone z jzykw programowania C , C + + czy Java. Pierwszy typ
skada si z dwch ukonikw ( I ! ) , komentarz zaczyna si wtedy od
miejsca wystpienia tych dwch znakw i obowizuje do koi1ca danej
linii.
Drugi rodzaj komentarza zaczyna si od sekwencji znakw /*, a ko
czy sekwencj */ . Jest to tzw. komentarz blokowy, jako e cay blok
tekstu znajdujcy si pomidzy wymienionymi sekwencjami znakw
jest ignorowany przez kompilator.
Naley pamita , e komentarzy blokowych nie wolno zagnieda .
Uycie sekwencji w postaci :
/*Komentarz blokowy
/*Komentarz zagniedony*/
*/
C#
50
w i cz e n i a
WICZENIE
Komentarz wierszowy
{
//inicjalzacja zmiennych
i nt X = l , y ;
y = ( X == 1 ) ? 10 : 20 ;
WICZENIE
Komentarz blokowy
i nt X = l , y ;
I*
Przykad uycia komentarza blokowego.
W tym miejscu korzystamy z wyraenia warunkowego.
*/
y = ( X == l ) ? 10 : 20 ;
Con sol e . Wr i teli n e ( "y = " + y ) :
3
I nstru keje
I nstrukcje wa run kowe
I nstru kcja if. .. else
Bardzo czsto w programie trzeba sprawdzi jaki warunek i od tego,
czy jest on prawdziwy, czy faszywy, zaley dalsze wykonywanie
rnych instrukcji. Do takiego sprawdzania suy wanie instrukcja
warunkowa i f... e l s e . Ma ogln posta :
i f ( wyraen i e warunkowe )
{
//instrukcje do wykonania, jeeli warunekjest prawdziwy
el s e
{
//instrukcje do wykonania, jeeli warunekjestfaszywy
}
Sprbujmy zatem wykorzysta tak instrukcj do sprawdzenia, czy
zmienna cakowita jest mniejsza od O .
52
C#
WICZENIE
w i cz e n i a
Wykorzystanie instrukcji if
i n t zmi enna = - 5 :
i f ( zmi enna < 0 )
el se
O,
Aby obliczy jego rozwizanie, liczymy tzw. delt () , ktra rwna jest:
B2 - 4 x A x C .
Rozdzi a 3 .
I n stru kcj e
53
./i
2xA
= -B-
.J"i
---
2xA
-B
--
2xA
WICZENIE
C#
54
w i cz e n i a
u s i n g Sy stem :
publ i c cl a s s P i e rwi a stek
pa rametrC = 4 :
el se
4 * pa ramet rA * pa rametrC :
el se
doub l e wyn i k ;
i f ( de l ta == 0 )
el se
Rozdzi a 3 .
I n stru kcj e
55
Wynik dziaania
program u
obliczajcego
pierwiastki
rwnania
kwadratowego
el s e {
i f ( warunek2) {
//instrukcje2
el se {
i f ( warunek3 ) {
//instrukcje3
C#
56
w i cz e n i a
el se {
//instrukcje4
//instrukcje 1
e l s e i f ( warunek2 ) {
//instrukcje 2
e l s e i f ( warunek3 ) {
//instrukcje 3
el s e {
//instrukcje 4
}
WICZENIE
u s i n g Sy stem ;
publ i c cl a s s P i e rwi a stek
{
publ i c stati c voi d Mai n ( str i n g [ J a rg s )
{
doubl e parametrA = 1 . p a r amet rB = 5
-
pa rametrC = 4 ;
el se
{
doub l e del ta = p a r ametr B * pa rametrB
doub l e wyn i k :
i f ( de l ta < 0 )
{
4 * pa ramet rA * pa rametrC :
Rozdzi a 3 .
I n stru kcj e
57
el se 1 f ( del ta == 0 )
{
wyn 1 k = - p a r amet rB I ( 2 * pa rametrA ) ;
Con sol e . Wr l teL1 n e C " Rozw1 zan 1 e : x = " + wyn 1 k ) ;
el se
{
wyn 1 k = ( - pa rametrB + Math . Sqrt ( de l ta ) ) I ( 2 * pa rametrA ) ;
Con sol e . Wr l te ( " Rozw1 zan 1 e : xl = " + wyn 1 k ) ;
wyn 1 k = ( - pa rametrB - Math . Sqrt ( de l ta ) ) I ( 2 * pa rametrA ) ;
Con sol e . Wrl tell n e ( " . x2 = " + wyn 1 k ) ;
e l s e 1 f C l 1 czba == 2 ) {
//instrukcje2
e l s e 1 f ( 1 1 czba == 3 ) {
//instrukcje3
el s e {
/linstrukcje4
}
moemy zastpi go poniszym:
sw1 tch ( 1 1 czba ) {
case 1 :
//instrukcje I;
brea k ;
case 2 :
//instrukcje2;
brea k ;
C#
58
w i cz e n i a
case 3 :
//instrukcje3;
brea k ;
defa u l t :
//instrukcje4,
brea k ;
}
Sprawdzamy tu po kolei, czy zmienna l i czba jest rwna 1 , potem 2
i w ko11cu 3 . Jeeli zgodno zostanie stwierdzona, wykonywane s
instrukcje po odpowiedniej klauzuli c a s e . Jeeli warto zapisana
w l i czba nie jest rwna adnej z wymienionych liczb , wykonywane
s instrukcje po sowie defa ul t . Instrukcja b r e a k powoduje wyjcie
z bloku swi tc h . Jeli zatem l i czba bdzie rwna 1 , zostan wykonane
instrukcje i nstrukcj el, jeli l i czba bdzie rwna 2 , zostan wykonane
instrukcje i nstrukcje2, jeli l i czba bdzie rwna 3 , zostan wykonane
instrukcje i nstrukcj e3 . Gdyby l i czba nie bya rwna ani 1 , ani 2, ani 3 ,
zostan wykonane instrukcje i nstrukcje4.
WICZENIE
Rozdzi a 3 .
I n stru kcj e
59
C:\Windows\system32\cmd.exe
Ptl e
Ptle w jzykach programowania pozwalaj na wykonywanie powta
rzajcych si czynnoci. Dokadnie w ten sam sposb dziaaj one
rwnie w C # . Jeli chcemy np . wypisa na ekranie 1 0 razy napis C#,
moemy zrobi to, piszc 10 razy Consol e . Wri tel i ne( " C#" ) ; . Lepiej jednak
wykorzysta w tym celu ptle .
Ptla fo r
Ptla typu fo r ma nastpujca skadni :
for ( wyraen ie pocztkowe : wyraen i e warunkowe : wyraen i e modyfi kujce )
{
//instrukcje do wykonania
}
jest stosowane do zainicjalizowania zmiennej uy
wanej jako licznik liczby wykona ptli; wyraenie wa runkowe okrela
warunek, jaki musi by speniony, aby wykona kolejne przejcie w p
tli; wyraenie modyfikujce uywane jest zwykle do modyfikacji zmiennej
bdcej licznikiem.
wyraenie pocz tkowe
C#
60
WICZENIE
w i cz e n i a
c:I
C : \cs>program . exe
l!I
Cit ctt Cit ctt Cit ctt Cit ctt Cit ctt Cit ctt Cf! Cf! Cf! ctt Cf! Cf! ctt Cf! ctt Cit ctt Cit ctt Cit cIii
Cit ctt Cf! Cf! Cf! Cf! Cf! Cf! Cf! Cf! Cf! Cit ctt Cit ctt Cf! ctt Cit c tt Cf! ctt Cit ctt Cf! Cf! Cf!
# Cf! C# C# C# C# C# C# C# C # C# C# C# C# C# C# C# C# C# C# C# C# C# C# C# C# C
C# ctt C# ctt C# ctt C# ctt C# ctt C# C# C# C# C# C# C# C# Cli C#
C : \cs>_
3.5
Rozdzi a 3 .
I n stru kcj e
61
}
WICZENIE
C#
62
WICZENIE
w i cz e n i a
}
WICZENIE
Rozdzi a 3 .
I n stru kcj e
63
i ++ ;
C#
64
w i cz e n i a
Rozdzi a 3 .
I n stru kcj e
65
Rysunek 3.5.
Program
wywietlajcy
liczby od 1 do 20
niepodzielne
przez 2
WICZENIE
C#
66
w i cz e n i a
Ptla wh ile
Ptla typu for suy raczej do wykonywania z gry znanej liczby opera
cji (-wprowadzonej bezporednio lub zalenej np . od stanu zmiennej) ,
w ptli wh i l e zwykle nie jest ona znana (moe by np . wynikiem
dziaania pewnej funkcji) . Nie jest to - oczywicie - podzia obli
gatoryjny. Ptl wh i l e mona napisa tak, by bya dokadnym funk
cjonalnym odpowiednikiem ptli fo r, a ptl fo r tak, by bya odpo
wiednikiem ptli wh i l e . Oglna konstrukcja ptli typu wh i l e jest
nastpujca:
wh i l e ( wyraen i e warunkowe )
{
ins trukcje :
}
Instrukcje s wykonywane dopty, dopki wyraenie warunkowe jest
prawdziwe . Oznacza to, e gdzie w ptli musi nastpi modyfikacja
warunku bd te instrukcja break (oglniej mwic, dowolna instrukcja
powodujca opuszczenie ptli) . Inaczej ptla bdzie si wykonywaa
w nieskof1czono !
WICZENIE
Rozdzi a 3 .
I n stru kcj e
67
WICZENIE
3. 1 4
C#
68
w i cz e n i a
i ++ ;
Ptla do
wh ile
ins trukcje ;
wh i l e ( warunek ) :
Zapis ten oznacza : wykonuj inst rukcje dopty, dopki wa runek jest
prawdziwy. Sprbujemy zatem wykona zadanie przedstawione w wi
czeniu 3 . 1 2 , ale skorzystamy z ptli typu do ...wh i l e .
WICZENIE
Rozdzi a 3 .
do
{
I n stru kcj e
69
wh i l e ( i ++ < 100 ) ;
...
WICZENIE
3. 1 6
wh i l e ( i ++ < 100 ) ;
C#
70
do
{
w i cz e n i a
wh i l e ( fa l s e ) :
Ptla fo reach
Ptla typu foreach suy do przegldania zawartoci tablicy lub ko
lekcji obiektw. Jej opis zostanie podany w rozdziale 5 .
for ( i n t i = O : i < 1 0 0 0 : i ++ )
{
l abe 1 1 : ;
}
Nic jednak nie stoi na przeszkodzie , aby zdefiniowa etykiet przed
1ub za drug ptl, piszc :
Rozdzi a 3 .
I n stru kcj e
71
for ( i n t j = O : j < 5 0 0 : j ++ )
{
i f( j == 1 0 0 ) goto l abel l :
}
l abel l :
for ( i n t i = O : i < 1 0 0 0 : i ++ )
{
}
C#
72
w i cz e n i a
Rozdzi a 3 .
I n stru kcj e
73
brea k :
}
}
}
Przykadowe
wyniki dziaania
program u
z wiczenia 3. 1 8
C#
74
w i cz e n i a
Rozdzi a 3 .
Rysunek 3. 7.
Program
wywietlajcy
argumenty podane
w wierszu polecei1
I n stru kcj e
.
75
- -
C#
76
Rysunek 3. 8.
W wyniku dodawania
zostaly zlqczone
argumenty
przekazane
do programu
w i cz e n i a
. ;,,. -
C : \cs>progr am . exe 12 8
Wyni ki em dzi aani a j est : 128
c : \cs>progr am . exe j eden dwa
Wyni ki em dzi aani a j est : j edendwa
C : \cs>_
WICZENIE
Rozdzi a 3 .
I n stru kcj e
77
}
c a tch ( Except 1 on )
{
Con so l e . W r 1 tel 1 n e (
"J eden z a rgumentw n 1 e j es t poprawn 1 1 czb l " ) ;
return :
}
Con sol e . Wr l tel l n e ( "Wyn 1 k 1 em dz1 a an 1 a j e s t : { O }" , 1 1 + 1 2 ) ;
}
}
C#
78
w i cz e n i a
u s i n g Sy stem :
c l a s s P i erwi a stek
{
publ i c stati c voi d Mai n ( str i n g [ J a rg s )
{
doubl e parametrA . pa ramet r B . pa rametrC :
i f ( a rg s . Length < 3 )
{
Con so l e . W r i tel i n e (
" Wywo a n i e programu : p i erw i a s tek . exe p a rametrA p a r a m e t r B
4pa rametrC " ) :
return :
}
try
{
pa rametrA = Doubl e . P a rs e ( a rg s [ O J ) ;
pa rametrB = Doubl e . P a rs e ( a rgs [ l J ) ;
pa rametrC = Doubl e . Pa rs e ( a rgs [2J ) ;
}
c a tch ( Except i on )
{
Con so l e . W r i tel i n e (
"J eden z p a r amet rw rwn a n i a n i e j est poprawn l i czb l " ) ;
return ;
}
Con sol e . Wr i tel i n e ( "Wprowa dzon e par amet ry rwn an i a : \ n " ) ;
Con sol e . Wr i teli n e ( "A : " + p a r ametrA + " B : " + pa rametrB +
" C : " + pa rametrC + " \ n " ) ;
i f ( pa rametrA == 0 )
{
Con so l e . W r i tel i n e ( "To n i e j es t rwn a n i e kwad r atowe : A = Q I " ) ;
}
el se
{
doub l e del ta = p a r ametr B * pa rametrB
4 * pa ramet rA * pa rametrC :
doub l e wyn i k :
-
i f ( de l ta < 0 )
{
Con sol e . Wr i teli n e ( " De l ta < O . " ) ;
Con sol e . Wr i tel i n e (
" Brak rozwi za w zbi orze l i czb rzeczywi stych . " ) ;
}
el se i f ( del ta == 0 )
{
Rozdzi a 3 .
I n stru kcj e
79
Rwnania
kwadratowe
o parametrach
podanych
w wierszu polecez1
C#
80
w i cz e n i a
" q u i t" )
Rozdzi a 3 .
I n stru kcj e
81
82
C#
w i cz e n i a
Rozdzi a 3 .
I n stru kcj e
83
u s i n g Sy stem :
c l a s s P i erwi a stek
{
publ i c stati c doub l e pobi erzli czbe ( stri n g pa ram )
{
doubl e l i czba = O :
bool su kces :
do
{
Con s o l e . W r i te ( " P rosz poda { O } p a r amet r rwnan i a : "
try
{
l i czba = Doubl e . Parse ( Con sol e . Rea d l i n e ( ) ) ;
s u k ces = true :
}
catch ( Except i on )
{
Con sol e . Wr i tel i n e (
"To n i e j e s t prawi d owa l i czba rzeczywi s ta l " ) ;
s u k ces = fa l se :
}
}
wh i l e ( 1 sukces ) ;
return l i cz ba ;
}
publ i c stati c voi d Mai n ( str i n g [ J a rg s )
{
doubl e parametrA = pobi erzli czbe ( " p i erwszy " ) ;
doubl e pa rametrB = pobi erzli czbe ( " drugi " ) ;
doubl e pa rametrC = pobi erzli czbe ( " trzeci " ) ;
p a r am ) :
i f ( de l ta < 0 )
{
Con sol e . Wr i teli n e ( " De l ta < 0 " ) ;
Con sol e . Wr i tel i n e (
" Brak rozwi za w zbi orze l i czb rzeczywi stych . " ) ;
C#
84
w i cz e n i a
}
el se 1 f ( del ta == 0 )
{
wyn 1 k = - pa rametrB I 2 * parametrA ;
Con sol e . Wr l tel1 n e ( " Rozw1 zan 1 e : x = " + wyn 1 k ) :
}
el se
{
wyn 1 k = ( - pa rametrB + Math . Sqrt ( de l ta ) ) I ( 2 * pa rametrA ) ;
Con sol e . Wr l te ( " Rozw1 zan 1 e : xl = " + wyn 1 k ) :
wyn 1 k = ( - pa rametrB - Math . Sqrt ( de l ta ) ) I ( 2 * pa rametrA ) :
Con sol e . Wr l tel1 n e ( " , x2 = " + wyn 1 k ) :
}
}
}
}
Rozdzi a 3 .
I n stru kcj e
85
warto fal se. Skoro tak, ptla do.wh i l e bdzie kontynuowana, a uyt
kownik zobaczy ponown prob o podanie wartoci liczbowej .
Zawarto metody Ma i n, od ktrej rozpoczyna si wykonywanie kodu
programu, jest prawie taka sama jak we wczeniejszych przykadach
dotyczcych rozwizywania rwnaf1 kwadratowych - zasady obli
cze si przecie nie zmieniy . Rnice dotycz samego pocztku
kodu. Wartoci zmiennych pa rametrA, parametrB i pa rametrC s po prostu
pobierane z opisanej wyej funkcji pobi erzl i czbe . Zapis :
doubl e parametrA
C#
86
w i cz e n i a
}
publ i c stati c voi d Mai n ( str i n g [ J a rg s )
{
bool l i n i a Komend = true :
doubl e parametrA = O . p a r amet rB = O . p a rametrC = O :
i f ( a rg s . Length < 3 )
{
l i n i a Komen d = fa l se :
}
i f ( l i n i a Komend )
{
try
{
p a rametrA = Doubl e . P a r s e ( a rgs [ O J ) :
p a r ametrB = Doub l e . P a r s e ( a rgs [ l ] ) :
pa rametrC = Doubl e . P a r s e ( a rgs [ 2J ) :
}
catch ( Except i on )
{
Con sol e . Wr i teL i n e C "J eden z wprowadzonych pa ramet rw n i e j es t
'+pop rawn l i czb ! " ) :
l i n i aKomend = fa l se : :
}
}
i f ( l l i n i aKomend )
{
pa rametrA = pobi erzli czbe ( " p i erwszy" ) :
pa rametrB = pobi erzli czbe ( " drugi " ) :
pa rametrC = pobi erzli czbe ( " trzec i " ) :
}
Con so l e . Wri tel i n e ( "Wprowa dzon e par amet ry rwn a n i a : \ n " ) ;
Con sol e . Wr i teli n e ( "A = " + pa ramet rA + " B = " + pa rametrB +
" . C = " + pa rametrC + " \ n " ) :
,
}
}
Rozdzi a 3 .
I n stru kcj e
87
(:\Wi ndow<\system32\cmd.exe
rzeczywistych
88
C#
w i cz e n i a
II
Prog ra mowa n i e obiektowe
90
C#
w i cz e n i a
4
Kl asy i o b iekty
Kl asy
Kady program w C# skada si z klas . Dotychczas uywalimy tylko
jednej klasy, ktra nazywaa si P rog ram lub Pi erwi astek . Wrmy za
tem do pierwszego programu z wicze, wywietlajcego na ekranie
napis . Kod wyglda nastpujco :
u s i n g Sy stem :
publ i c cl a s s Program
{
publ i c stati c voi d Mai n ( str i n g [ J a rg s )
{
Con so l e . W r i tel i ne ( " Mj pi erwszy program i " ) :
}
}
92
C#
w i cz e n i a
Prosta klasa
Rozdzi a 4.
Kl a s y i o b i e k t y
93
C#
94
w i cz e n i a
M etody
Metody, jak ju zostao wspomniane, zawieraj kod operujcy na polach
danej klasy bd te na dostarczonych z zewntrz danych (oglniej
- mog wykonywa dowolnie zaprogramowane zadanie) . Metody
wywoujemy za pomoc operatora . (znak kropki), poprzedzajc go na
zw zmiennej odnonikowej (referencyjnej) . Wyglda to nastpujco :
nazwa_zmiennej . nazwa_metody( argumen ty_metody) :
Rozdzi a 4.
Kl a s y i o b i e k t y
95
lub te :
punkt . GetX ( ) ;
np . tak:
i n t wsp rzdn a X = punkt . X ;
i n t wspX = pun k t . GetX ( ) ;
C#
96
w i cz e n i a
warto 1 0 .
Rozdzi a 4.
97
Kl a s y i o b i e k t y
}
}
4.4
98
C#
w i cz e n i a
Rozdzi a 4.
Con sol e . Wri teli n e (
"Wsp rzdna y
Kl a s y i o b i e k t y
99
}
}
Poniewa w miejsce vvywoania metody Pobi erzWs pol rzedne jest pod
stawiany wynik jej dziaania, czyli zwrcony ob iekt, mona zasto
sowa odwoanie typu:
punkt . Pobi erzWspol rzedne ( ) . x
C#
1 00
WICZENIE
w i cz e n i a
Metody UstawWs pol rzedne i Pobi erzWs pol rzedne maj tak sam posta
jak w wiczeniu 4 . 3 . Metoda UstawX przyjmuje jeden argument typu
i nt (ws pX) i przypisuje jego warto polu x. Metoda UstawY dziaa ana
logicznie, z tym e przypisuje warto otrzymanego argumentu polu y.
Metody Pobi erzX i Pobi erzY po prostu zwracaj wartoci odpowiednich
pl za pomoc instrukcji return (podobnie jak w wiczeniu 4.2) .
Rozdzi a 4.
Kl a s y i o b i e k t y
1o1
Przeciqianie metod
C#
1 02
w i cz e n i a
punkt . y = y ;
}
I / Tutaj pozos ta e metody k l asy Punkt z wi czen i a 4 . 6
}
Rozdzi a 4.
Kl a s y i o b i e k t y
1 03
Konstruktory
Zwykle polom danego obiektu chcemy przypisa jakie wartoci po
cztkowe. Jeeli pola te zawieraj zmienne referencyjne, trzeba
wrcz utworzy przypisane im obiekty. Czasami te przed uyciem da
nego obiektu naley wykona bardziej zoony kod. Mona - oczy
wicie - napisa w tym celu dodatkow zwyk metod i uywa jej
np . nastpujco :
Kl a s a obi ekt = n ew K l a s a ( ) ;
obi ekt . I n i c j u j Zmi enn e ( ) :
1 04
C#
w i cz e n i a
}
}
Rozdzi a 4.
{
Kl a s y i o b i e k t y
1 05
x = wspX :
y = wspY :
}
I/Tutaj pozostae metody klasy Punkt
Wykorzystanie
klasy Program
z wiczenia 4. 8
w polqczeniu
z klasq Punkt
z wiczenia 4.9
--
C : \cs>Program . exe
Przed ustawi eni em wartosc1 :
800
Ws p r zdna x
Ws p r zdna x = 600
Po ustawi eni u wartoci :
Ws p r zdna x
1
Ws p r zdna y = 2
C : \cs>_
C#
1 06
WICZENIE
w i cz e n i a
Wykorzystanie konstruktorw
Rozdzi a 4.
1 07
Kl a s y i o b i e k t y
Efekt uycia
konstruktorw
klasy Punkt
w wiczeniu 4. 1 1
OI
. - -
c : \cs>Program . exe
Punkt l : Wsprzdna X
Punkt l : Wsprzdna y
Punkt 2 : Wsprzdna X
Punkt 2 : Wsprzdna y
=
=
=
800
600
100
100
C : \cs >_
1 08
C#
w i cz e n i a
Skadowe prywatne
Rozdzi a 4.
Kl a s y i o b i e k t y
1 09
}
publ i c i nt GetY ( )
{
return y :
}
}
WICZENIE
11o
C#
w i cz e n i a
ii C:\Windows\ system32\cmd.exe
WICZENIE
publ i c cl a s s Program
Rozdzi a 4.
{
111
Kl a s y i o b i e k t y
Poloenie punktu
reprezentowane
za pomoc
wsplrzdnych
biegunowych
oy
P(x , y )
-------------------
0
'
ox
1 12
C#
w i cz e n i a
Zmie definicj klasy Punkt z wiczenia 4.10 w taki sposb, aby pooe
nie punktu byo reprezentowane w ukadzie biegunowym.
u s i n g Sy stem :
publ i c cl a s s Punkt
{
pri vate doubl e mod ul :
pri vate doubl e s i n a l fa :
publ i c Punkt ( )
{
Us tawWspol rzedne ( 80 0 . 60 0 ) :
}
publ i c Punkt ( i nt x . i nt y )
{
Us tawWspol rzedne ( x . y ) :
}
publ i c vo i d Us tawWs pol rzedn e ( i n t wspX . i nt wspY )
{
modul = Math . Sqrt (wspX * wspX + wspY * wspY ) :
s i n a l fa = wspY I modul :
}
publ i c Punkt Pobi e rzWspol rzedne ( )
{
Punkt punkt = new Punkt( ) :
punkt . s i n a l fa = s i n a l fa :
punkt . modul = modul :
return pun k t :
}
publ i c vo i d Pobi erzWspol rzedn e ( Punkt pun k t )
{
punkt . s i n a l fa = s i n a l fa :
punkt . modul = modul :
}
publ i c vo i d Us tawX ( i n t wspX )
{
Us tawWspol rzedne (wspX . Pob i e rzY ( ) ) ;
}
publ i c vo i d Us tawY ( i n t wspY )
{
Us tawWspol rzedne ( Pobi erz X ( ) , wspY ) ;
Rozdzi a 4.
Kl a s y i o b i e k t y
1 13
}
publ i c i nt Pobi e rz X ( )
{
doubl e x
modul * Math . Sqrt ( l - s i n a l fa * s i n a l fa ) :
return ( i n t ) x :
}
publ i c i nt Pob i erzY ( )
{
doubl e y
modul * s i n a l fa ;
return ( i n t ) y ;
}
=
(sin(a)
na rysunku 4. 5)2, reprezentowany przez pole o nazwie s i nal fa, jest rw-
sin( a) ,
za to x wynika ze wzoru :
modu x
1 - sin 2 (a) .
114
C#
w i cz e n i a
Dziedziczenie
Znamy ju dosy dobrze klas Punkt, zamy jednak, e chcieliby
my mie klas opisujc nie tylko wsprzdne punktu, ale rwnie
jego kolor. Chcielibymy mie rwnie moliwo jednoczesnego ko
rzystania z obu klas . Mona - oczywicie - utworzy now klas
typu Ko l o rowyPunkt, ktra mogaby wyglda np . tak:
publ i c cl a s s Punkt
{
publ i c i nt x . y , kol o r :
}
Rozdzi a 4.
Kl a s y i o b i e k t y
115
publ i c cl a s s k l asa_potomna
{
k l asa bazowa
//wntrze klasy
WICZENIE
Proste dziedziczenie
1 16
C#
w i cz e n i a
Rozdzi a 4.
Kl a s y i o b i e k t y
117
WICZENIE
ba se (wspX , wspY )
1 18
C#
w i cz e n i a
5
Ta b l ice
Tablice to jedne z podstawoV\T)Tch struktur danych; znane s zapewne
nawet pocztkujcym programistom. Warto jednak w kilku sowach
przypomnie podstawowe wiadomoci i pojcia z nimi zwizane .
Tablica to stosunkowo prosta struktura danych pozwalajca na prze
chowanie uporzdkowanego zbioru elementw danego typu - mona
j sobie wyobrazi tak, jak zaprezentowano na rysunku 5 . 1 . Skada
si z ponumerowanych kolejno komrek, a kada taka komrka moe
przechowywa pewn porcj danych.
Rysunek 5. 1.
Schemat struktury
tablicy
o
120
C#
w i cz e n i a
De kl a rowa n ie ta b l ic
Przed skorzystaniem z tablicy naley zadeklarowa zmienn tablicow.
Poniewa w C# tablice s obiektami, naley rwnie utworzy od
powiedni obiekt. Schematycznie robi si to w sposb nastpujcy:
typ_tab 7 i cy [ ] nazwa_tab 7 i cy
Piszc zatem:
i n t tabl i ca [ ] :
Utworzenie tablicy
R o zd z i a 5 .
Ta b l i c e
121
1 22
C#
Rysunek 5. 2.
Prba odwoania si
do nieistniejcego
elementu tablicy
powoduje blqd
aplikacji
<
w i cz e n i a
program .exe
l n icja l izacja ta b l ic
Tablic mona zainicjalizowa ju w momencie jej tworzenia . Dane ,
ktre maj si znale w poszczeglnych komrkach, podaje si w na
wiasach klamrovvych po deklaracji tablicy. Schematycznie wyglda to
nastpujco :
typ [ ] nazwa
R o zd z i a 5 .
Ta b l i c e
1 23
WICZENIE
lnicjalizacja tablicy
Rysunek 5.4.
Zawarto
kolejnych komrek
tablicy utworzonej
w wiczeniu 5. 3
1 24
C#
w i cz e n i a
Rozmi a r ta b l icy
Kada tablica posiada waciwo Length, ktra okrela biec liczb
komrek. Aby uzyska t informacj, piszemy:
tab 7 i ca . Length
R o zd z i a 5 .
Ta b l i c e
1 25
Przy tym dopuszczalny jest tylko odczyt, czyli prawidowa jest kon
strukcja :
i n t rozmi a r
tabl i c a . Length ;
WICZENIE
10 :
WICZENIE
1 26
C#
w i cz e n i a
};
fo r ( i n t i = O ; i < tab . Length : i ++ )
{
Con so l e . W r i tel i ne ( "tab [ " + i + " ] = " + tab [ i J ) :
}
}
}
R o zd z i a 5 .
Ta b l i c e
1 27
Ptl a fo reach
Dotychczas poznalimy trzy rodzaje ptli : fo r, wh i l e i do.wh i l e (bya
o nich mowa w rozdziale 3 .) . W przypadku tablic (jak rwnie kolekcji,
ktre w tej ksice nie byy omawiane1) mona rwnie skorzysta
z ptli typu fo reach . Jest ona bardzo wygodna, gdy umoliwia prost
iteracj po wszystkich elementach tablicy; nie trzeba wtedy wprowa
dza dodatkowej zmiennej iteracyjnej . Ptla fo reach ma nastpujc
posta :
foreac h ( typ i dentyfi ka tor i n wyraen i e )
{
//instrukcje
Jeeli zatem mamy tablic o nazwie tab zawierajc liczby typu i nt,
moemy zastosowa konstrukcj :
1 28
C#
w i cz e n i a
foreac h ( i n t v a l i n tab )
{
//instrukcje
R o zd z i a 5 .
WICZENIE
Ta b l i c e
1 29
1 30
C#
w i cz e n i a
Przykad tablicy
dwuwymiarowej
o
1
R o zd z i a 5 .
typ tab 7 i cy [ , J nazwa tab 7 i cy
{
( danal , dana2 ) ,
( dana3 , dana4 ) ,
-
Ta b l i c e
1 31
( danaM. danaN )
};
1 32
C#
Rysunek 5. 6.
Tablica z wiczenia 5. 1 0
po wypelnianiu danymi
w i cz e n i a
o
Wynik dzialania
program u
z wiczenia 5. 1 0
Przyklady bardziej
skomplikowanych tablic
dwuwymiarowych
R o zd z i a 5 .
Ta b l i c e
1 33
Jeli zatem typem nie jest i nt, ale tablica typu i nt, ktr oznacza si
jako i nt [ J , naley napisa :
i n t [ J [ J tabl i ca :
1 34
C#
w i cz e n i a
Tablica z wiczenia
5. 1 1 wypelniona
przykladowymi
danymi
10
Oczywicie, jest to jak najbardziej moliwe, a z nieregularnoci ta
blicy mona sobie poradzi w bardzo prosty sposb . Przecie kada
tablica ma, omwion wczeniej w tym rozdziale, waciwo Length,
przy uyciu ktrej da si sprawdzi jej dugo . To cakowicie rozwi
zuje problem wywietlenia danych nawet z tak nieregularnej struktury
jak obecnie opisywana.
WICZENIE
R o zd z i a 5 .
Ta b l i c e
1 35
Wywietlenie danych
z nieregularnej tablicy
w wiczeniu 5. 1 2
(::.
C : \cs>Pr o gr am . exe
tabl i ca [OJI
[1] [2]
tabl i ca [ l] = [ 5 ] [6]
tabl i ca [2] = [7] [8]
tabl i ca [ 3] = [10]
=
1c : \cs>_
[ 3]
[9]
[ 4]
1 36
C#
w i cz e n i a
6
Wyjqtki i obsuga bd w
O bsuga bdw
W kadym wikszym programie wystpuj jakie bdy. Oczywicie,
staramy si ich wystrzega , nigdy jednak nie uda si ich cakowicie
wyeliminowa . Co wicej, aby program wychwytywa przynajmniej
cz bdw, ktrych przyczyn jest np . wprowadzenie zych wartoci
przez uytkownika, trzeba napisa wiele wierszy dodatkowego kodu,
ktry zaciemnia gwny kod programu . Jeeli przykadowo zadekla
rowalimy tablic 5-elementow, naleaoby sprawdzi, czy nie od
woujemy si do nieistniejcego elementu.
WICZENIE
C#
1 38
w i cz e n i a
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 39
WICZENIE
==
C#
1 40
w i cz e n i a
Odwalanie do nieistniejcego
elementu nie powoduje
ju bldu aplikacji
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 41
1 42
C#
w i cz e n i a
}
el se
{
i s Error
true :
return - 1 :
}
=
}
}
Tym razem informacja o tym, czy wystpi bd, jest zawarta w polu
i s E rro r, ktremu w konstruktorze przypisywana jest pocztkowa
warto fa l s e . W metodzie getEl ement w standardowy sposb bada
si zakres wartoci argumentu i ndex. Jeeli zawiera si on w prawi
dowym przedziale, pole i s E rror otrzymuje warto fa l s e i zwracana
jest warto elementu pobranego z tablicy . W przeciwnym razie pole
i s E r r o r otrzymuje warto t r u e , co sygnalizuje wystpienie bdu,
i zwracana jest warto - 1 . Co prawda, jest ona w takim przypadku bez
uyteczna, ale instrukcja return nie moe si oby bez podania war
toci typu i nt, gdy tak warto musi zwrci metoda getEl ement.
W klasie P rog ram, korzystajcej z obiektw typu Tabl i ca , po wywoa
niu metody getEl ement badany jest stan pola i s E rror obiektu tab. Gdy
jest rwne true (i f(tab . i s Erro r ) ) , wypisywany jest komunikat o bdzie,
a gdy jest rwne fal se, wywietlana jest warto pobranego elementu .
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 43
}
catch ( TypWyj tkul i den tyfi ka torWyjtkul )
{
//obsuga wyjtku 1
}
catch ( TypWyj tku2 i den tyfi ka torWyjtku2)
{
//obsuga wyjtku 2
}
catch ( TypWyj tkuN i den tyfi katorWyjtkuN)
{
//obsuga wyjtku n
1 44
C#
w i cz e n i a
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 45
catch ( TypWyjtku )
zamiast:
catch ( TypWyjtku i ndentyfi katorWyj tku )
C#
1 46
w i cz e n i a
Rozdzi a 6 .
WICZENIE
Wyj q t k i i o b s u g a b d w
1 47
generuje blqd
C#
1 48
WICZENIE
w i cz e n i a
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 49
Exception
L system Exception
LI
nd exOutOfRangeException
C#
1 50
{
w i cz e n i a
}
}
}
publ 1 c cl a s s Tabl 1 ca
{
C:\Windows\system32\cmd.exe
Popraw kod klasy Prog ram z poprzedniego wiczenia tak, aby wyjtki
byy przechwytywane w odpowiedniej kolejnoci.
u s 1 n g Sy stem :
publ 1 c cl a s s Program
{
publ 1 c stat1 c vo1 d M a 1 n ( )
Rozdzi a 6 .
{
Wyj q t k i i o b s u g a b d w
1 51
}
}
Wasne wyjqtki
Stosowanie wyjtkw nie ogranicza si tylko do przechwytywania
tych, ktre s generowane przez system. Mona je rwnie zgasza
samodzielnie . Powrmy zatem do wiczenia 6 . 5 . Konstrukcja klasy
Tabl i ca mogaby by zupenie inna . Dobrze byoby sprawdza, czy
parametr przekazywany metodzie getEl ement nie przekracza dopusz
czalnych wartoci, a jeli tak, samodzielnie wygenerowa wyjtek.
Jest to moliwe ; suy do tego instrukcja th row w postaci :
th row ob i ekt_wyjtku :
WICZENIE
Zgoszenie wyjtku
1 52
C#
w i cz e n i a
u s i n g Sy stem :
publ i c cl a s s Program
{
publ i c stati c voi d M a i n ( )
{
Tabl i ca tab = new Tabl i ca ( ) :
try
{
i n t v a l ue = tab . getEl emen t ( 20 ) ;
Con s o l e . W r i tel i n e ( " El ement n r 20 ma wa rto : " + v a l ue ) ;
}
c a tch ( I n dexOutOfRange Except i on )
{
Con s o l e . W r i tel i n e ( " N i e ma e l ementu o n umerze 20 1 " ) ;
}
}
}
publ i c cl a s s Tabl i ca
{
i n t [ ] tab ;
publ i c Tabl i c a ( )
{
tab = new i n t [ 5J ;
}
publ i c i nt getEl ement ( i nt i ndex )
{
i f ( i ndex < O 1 1 i ndex > tab . Length
1)
{
th row new I n dexOutOfRan ge Excepti on ( ) ;
}
el se
{
return ta b [ i ndexJ ;
}
}
}
-
Rozdzi a 6 .
Wyj q t k i i o b s u g a b d w
1 53
WICZENIE
Except i on
publ i c cl a s s Program
{
publ i c stati c voi d M a i n ( )
{
Tabl i ca tab = new Tabl i ca ( ) :
try
{
i n t v a l ue = tab . getEl emen t ( 20 ) ;
Con s o l e . W r i tel i n e ( " El ement n r 20 ma wa rto : " + v a l ue ) :
}
c a tch ( N i eMaTa k i egoEl ementu )
{
Con s o l e . W r i tel i n e ( " N i e ma e l ementu o n umerze 20 ! " ) ;
}
}
}
publ i c cl a s s Tabl i ca
{
C#
1 54
w i cz e n i a
i n t [ ] tab ;
publ i c Tabl i c a ( )
{
tab = new i n t [ 5J :
}
publ i c i nt getEl ement ( i nt i ndex )
{
i f ( i ndex < O 1 1 i ndex > tab . Length
{
th row new Ni eMaTa k i egoE l ementu ( ) ;
}
el se
{
return ta b [ i ndexJ ;
}
}
1)
7
I nterfejsy
Prosty i nte rfejs
Interfejsy s konstrukcjami takimi jak klasy, z t rnic, e zawie
raj jedynie deklaracje metod, a nie ich definicje. Inaczej mwic, s
klasami abstrakcyjnymi . Kada zwyka klasa moe implementowa
dany interfejs, co oznacza, e musi zawiera definicje wszystkich metod
umieszczonych w tym interfejsie .
Zamy, e mamy zdefiniowan klas Poi nt w najprostszej postaci,
zawierajc jedynie dwa pola typu i nt : jedno dla wsprzdnej x,
drugie dla wsprzdnej y :
publ i c cl a s s Poi nt
{
pub l i c i n t x ;
publ i c i nt y ;
}
C#
1 56
WICZENIE
w i cz e n i a
Pierwszy interfejs
Rozd z i a 7 .
I n te rfejsy
1 57
metody Show
nazwa in terfejsu
//definicja klasy
WICZENIE
C#
1 58
w i cz e n i a
WICZENIE
Rozd z i a 7 .
1 59
I n te rfejsy
7.4
C # w i cz e n i a
1 60
c l a s s k l asa_potomna
{
//definicja klasy
Shape
Rectan g l e
Shape
x:
y:
wi dth ;
hei ght ;
S h a pe
Rozd z i a 7 .
I n te rfejsy
1 61
Zaimplementuj interfejs I Show dla klas Recta ngl e i Tri angl e zdefinio
wanych w wiczeniu 7 . 5 .
u s i n g Sy stem :
publ i c i nterface ! Sh ow
{
voi d Show ( ) :
}
publ i c cl a s s Sh ape
{
publ i c i nt col or :
}
publ i c cl a s s Poi nt : Sh ape
{
pub l i c i n t x :
publ i c i nt y ;
}
publ i c cl a s s Rectan g l e
{
pub l i c i n t x :
Shape , ! Show
C#
1 62
w i cz e n i a
publ i c i nt y ;
publ i c i nt wi dth ;
publ i c i nt hei ght :
publ i c vo i d Show ( )
{
Con sol e . Wr i teli n e ( " Pa rametry prostok ta : " ) ;
Con sol e . Wr i tel i n e ( "wsp rzdn a x = { O } " . x ) :
Con sol e . Wr i tel i n e ( "wsp rzdn a y = { O } " . y ) ;
Con sol e . Wr i tel i n e ( " d ugo = { O }" . wi dth ) ;
Con sol e . Wr i teli n e ( " s zerok o = { O } \ n " . hei gh t ) ;
}
}
publ i c cl a s s Tri angl e
S h a pe . I S how
{
publ i c Po i nt a ;
publ i c Po i nt b ;
publ i c Po i nt c ;
publ i c vo i d Show ( )
{
Con sol e . Wr i teli n e ( " Pa rametry trj k ta : " ) ;
Con sol e . Wr i tell n e C "punkt a = ( { O } . { l } ) " , a . x . a . y ) ;
Con sol e . Wr i teli n e ( "punkt b = ( { 0 } . { l } ) " , b . x . b . y ) ;
Con sol e . Wr i teli n e ( "punkt c = ( { O } . { l } ) \ n " . c . x . c . y ) ;
}
}
Rozd z i a 7 .
I n te rfejsy
1 63
prostok at . x = 1 0 0 :
prostok at . y = 2 0 0 :
prostok a t . wi dth = 50 ;
prostok a t . h e i ght = 8 0 :
Tri angl e troj k a t = new Tri a n g l e ( ) :
troj k a t . a = new Poi n t ( ) :
troj k a t . b = new Poi n t ( ) :
troj k a t . c = new Poi n t ( ) ;
troj k a t . a . x = 10 :
troj k a t . a . y = 20 :
troj k a t . b . x = 15 :
troj k a t . b . y = 18 :
troj k a t . c . x = 42 :
troj k a t . c . y = 24 :
prostok at . Show ( ) ;
troj k a t . Show( ) :
}
}
Przykad dziaania
metody Show
dla obiektw
rnych klas
1 64
C#
w i cz e n i a
Zaimplementuj interfejs ! Show dla klasy Poi nt, dodaj konstruktory dla
klas Poi nt, Rectangl e i Tri angl e .
u s i n g Sy stem ;
i n terface I Show
{
voi d Show ( ) ;
}
publ i c cl a s s Sh ape
{
publ i c i nt col or ;
}
publ i c cl a s s Rectan g l e
Shape , I Show
{
pub l i c i n t x ;
publ i c i nt y ;
publ i c i nt wi dth ;
publ i c i nt hei ght :
publ i c Rectan g l e ( i n t x , i nt y , i nt wi dth . i n t hei ght )
{
th i s . x
x;
th i s . y
y;
th i s . wi dth
wi dth :
th i s . he i ght
h e i ght :
}
=
Rozd z i a 7 .
I n te rfejsy
1 65
publ i c vo i d Show ( )
{
Con sol e . Wr i teli n e ( " Pa rametry prostok ta : " ) ;
Con sol e . Wr i tel i n e ( "wsp rzdn a x = { O } " . x ) :
Con sol e . Wr i tel i n e ( "wsp rzdn a y = { O } " . y ) ;
Con sol e . Wr i tel i n e ( " d ugo = { O }" . wi dth ) :
Con sol e . Wr i teli n e ( " s zerok o = { O } \ n " . hei gh t ) :
}
}
publ i c cl a s s Tri angl e
S h a pe . I S how
{
publ i c Po i nt a :
publ i c Po i nt b ;
publ i c Po i nt c :
publ i c Tri angl e ( Po i nt a . Po i n t b . Po i n t c )
{
th i s . a = a :
th i s . b = b :
th i s . c = c :
}
publ i c vo i d Show ( )
{
Con sol e . Wr i teli n e ( " Pa rametry trj k ta : " ) ;
Con sol e . Wr i te ( "punkt a = " ) ; a . Show( ) ;
Con sol e . Wr i te ( " \ n pun kt b = " ) ; b . Show ( ) ;
Con sol e . Wr i te ( " \ n pun kt c = " ) ; c . Show ( ) ;
Con sol e . Wr i te ( " \ n " ) ;
}
}
publ i c cl a s s Poi nt
Shape . I Show
{
pub l i c i n t x ;
publ i c i nt y ;
publ i c Poi n t ( i nt x . i nt y )
{
th i s . x = x :
th i s . y = y :
}
publ i c vo i d Show ( )
{
Con sol e . Wr i te ( " ( { O } . { l } ) " , x . y ) :
}
}
C#
1 66
w i cz e n i a
Rozd z i a 7 .
I n te rfejsy
1 67
Czy to i nterfejs?
Wiemy ju sporo o interfejsach w C#, przydayby si jednak jeszcze
wiadomoci o tym, w jaki sposb stwierdzi , czy dany obiekt imple
mentuje konkretny interfejs. Oczywicie, w najprostszym przypadku
tak wiedz dysponowa bdziemy ju na etapie kompilacji. Zamy,
e operujemy na klasach Recta ngl e i T r i a n g l e utworzonych w wi
czeniu 7 . 8 i klasie P o i nt z wiczenia 7 . 5 uzupenionej konstruktorem
z wiczenia 7 . 8 . Klasy Rectangl e i Tri angl e implementuj interfejs !Show,
natomiast klasa Po i nt
nie.
-
C#
1 68
w i cz e n i a
Zmodyfikuj kod dotyczcy klas Shape, Rectangl e, Tri angl e i Poi nt w taki
sposb, aby w klasie Shape znalaza si wirtualna metoda Show.
i n terface I Show
{
voi d Show ( ) ;
}
publ i c abstract c l a s s Sh ape
{
publ i c i nt col or ;
publ i c vi rtu a l voi d Show ( )
{
Con sol e . Wr l tel i n e ( " Metoda Show k l a sy bazowej " ) ;
publ i c cl a s s Rectan g l e
{
pub l i c i n t x ;
publ i c i nt y ;
Shape . I Show
Rozd z i a 7 .
I n te rfejsy
publ i c i nt wi dth :
publ i c i nt hei ght :
publ i c Rectan g l e ( i n t x . i nt y , i nt wi dth . i n t hei ght )
{
th i s . x = x :
th i s . y = y ;
th i s . wi dth = wi dth ;
th i s . he i ght = h e i ght ;
}
publ i c overr i de vo i d Show( )
{
Con sol e . Wr i teli n e ( " Pa rametry prostok ta : " ) ;
Con sol e . Wr i tel i n e ( "wsp rzdn a x = { O } " , x ) ;
Con sol e . Wr i tel i n e ( "wsp rzdn a y = { O } " , y ) ;
Con sol e . Wr i tel i n e ( " d ugo = { O }" , wi dth ) :
Con sol e . Wr i teli n e ( " s zerok o = { O } \ n " , hei gh t ) :
}
}
publ i c cl a s s Tri angl e
S h a pe , I S how
{
publ i c Po i nt a :
publ i c Po i nt b :
publ i c Po i nt c :
publ i c Tri angl e ( Po i nt a . Po i n t b , Po i n t c )
{
th i s . a = a :
th i s . b = b :
th i s . c = c :
}
publ i c overr i de vo i d Show( )
{
Con sol e . Wr i teli n e ( " Pa rametry trj k ta : " ) :
Con sol e . Wr i teli n e ( "punkt a = ( { 0 } , { l } ) " , a . x , a . y ) ;
Con sol e . Wr i teli n e ( "punkt b = ( { O } , { l } ) " , b . x , b . y ) ;
Con sol e . Wr i teli n e ( "punkt c = ( { O } , { l } ) \ n " , c . x , c . y ) ;
}
}
publ i c cl a s s Poi nt
Shape
{
pub l i c i n t x :
publ i c i nt y ;
publ i c Poi n t ( i nt x . i nt y )
{
th i s . x = x :
th i s . y = y ;
}
}
1 69
C#
1 70
w i cz e n i a
Rozd z i a 7 .
I n te rfejsy
1 71
W kodzie zostay utworzone trzy obiekty typw Recta ngl e, Tri angl e
oraz Poi nt. Powstaa rwnie 3-elementowa tablica typu Shape, w ktrej
kolejnych komrkach zostay zapisane obiekty : p r o s t o k a t , tro j k a t
i punkt. Przypisanie byo moliwe, dlatego e wymienione klasy dziedzi
cz z klasy Shape. Na zakoczenie w ptli fo r dla kadego obiektu
zawartego w tablicy zostaa wywoana metoda Show (ta b [ i ] . Show( ) ) .
1 72
C#
w i cz e n i a
rzutowanie typu,
konstrukcja ze sowem i s ,
konstrukcja ze sowem a s .
Rzutowa nie
Pierwsza metoda to dokonanie rzutowania obiektu na typ interfejsu .
Jeli w tablicy znajduje si obiekt typu Shape, mona wykona prb
rzutowania go na typ !S how, czyli uy konstrukcji w postaci:
( I Show ) tabl i ca [ i ndek s J :
Rozd z i a 7 .
I n te rfejsy
1 73
1 74
C#
w i cz e n i a
Rysunek 7. 7.
Metoda Show
zostala wywalana
jedynie dla obiektw
Rectangle i Triangle
Sowo kl uczowe as
Sposb drugi to uycie operatora as . Mona go wykorzysta w sposb
nastpujcy:
obi ekt a s i n terfej s ;
Oto przykad :
I Show obj = tabl i ca [ i ndek s J a s I S how ;
Rozd z i a 7 .
I n te rfejsy
1 75
Uycie operatora as
Sowo kl uczowe is
Ostatnim z prezentowanych sposobw na stwierdzenie , czy obiekt
implementuje dany interfej s, jest uycie operatora i s . Najczciej
uywa si go w poczeni u z klasyczn konstrukcj warunkow i f.
Schemat postpowania jest nastpujcy:
i f ( obi ekt i s i n terfej s )
{
//instrukcje do wykonania, gdy obiekt implementuje interfejs
1 76
C#
w i cz e n i a
Wykorzystanie operatora is
fo r ( i n t i
O : i < tab . Length : i ++ )
{
i f( tab [ i J i s ! Show )
{
tab [ i J . Show ( ) :
}
el se
{
Con sol e . Wr i teli n e ( " t a b [ { O } J : b r a k wywo an i a Show . " , i ) :
}
}
=
}
}
III
Prog ra mowa nie w Wi ndows
1 78
C#
w i cz e n i a
8
Pie rwsze o kno
Utworzenie okna
W pierwszych dwch czciach ksiki znalazy si przykady bar
dzo wielu programw konsolowych, zatem najwyszy czas zaj si
tworzeniem aplikacji z graficznym interfejsem uytkownika. Podob
nie jak w czci pierwszej, kod bdziemy pisa rcznie" , nie korzy
stajc z pomocy edytora Visual C # . To pozwoli na dobre poznanie
mechanizmw rzdzcych aplikacjami okienkowymi.
Podstawowy szablon kodu pozostanie taki sam jak w dotychczaso
wych przykadach . Dodatkowo trzeba bdzie poinformowa kom
pilator o tym, e chcemy korzysta z klas pakietu Windows .Forms.
Na pocztku kodu bdzie wic umieszczana dyrektywa us i ng w po
staci us i ng Wi ndows . Fo rms :
u s i n g Sy stem ;
u s i n g Wi ndows . Forms ;
publ i c cl a s s n a zwa_k l a sy
{
publ i c stati c voi d M a i n ( )
{
//tutaj instrukcje do wykonania
C#
1 80
w i cz e n i a
ii C:\Windows\system32\cmd.exe - Program.exe
Rozdzi a 8 .
P i e rwsze o k n o
1 81
Ty p
Nazwa
waciwoci
Znaczenie
bool
AutoScal eMode
bool
AutoScro l l
bool
AutoSi ze
AutoSi zeMode.
AutoSi zeMode
AutoSi zeMode
Col or
BackCo l or
C#
1 82
w i cz e n i a
Ty p
Nazwa
waciwoci
Znaczenie
Im age
Background Image
Bounds
Bounds
Si ze
C l i entSi ze
Con textMenu
ContextMenu
Cu rsor
Cursor
Font
Font
Col or
ForeCol or
FormBo rderStyl e
FormBorde rStyl e
i nt
Hei ght
I con
I con
i nt
Le ft
Po i nt
Locati on
Ma i nMenu
Menu
bool
Mod a l
s t r i ng
N a me
Control
Pa ren t
Rozdzi a 8 .
P i e rwsze o k n o
1 83
Ty p
Nazwa
waciwoci
bool
Show i nTa s kb a r
Si ze
Si ze
Stri ng
Text
Znaczenie
tytuu).
i nt
Top
bool
Vi s i b l e
i nt
Wi dth
FormWi n dowState
Wi ndowSta te
WICZENIE
1 84
C#
w i cz e n i a
Wynik dziaania
metody Show klasy
MessageBox
WICZENIE
Rozdzi a 8 .
P i e rwsze o k n o
1 85
C#
1 86
w i cz e n i a
WICZENIE
9
De l eg a cje i zd a rzenia
Del egacje
Przed przystpieniem do budowy aplikacji okienkowych bardziej zo
onych ni przedstawiane w rozdziale 8 . trzeba zapozna si z tematem
delegacji i zdarze. Wiadomoci te bd niezbdne , aby mona byo
reagowa na zdarzenia generowane przez uytkownika, takie jak klik
nicie przycisku czy te wybranie pozycji z menu. Czym zatem s
wspomniane delegacje? Mona powiedzie, e historycznie wywodz
si ze wskanikw do funkcji znanych jeszcze z C i C + + , cho s
konstrukcjami bardziej zaawansowanymi.
Rozwamy taki przykad : mamy dowoln, utworzon przez nas klas .
Klasa ta bdzie zawieraa dwa pola o nazwach x i y oraz metod Show
wywietlajc dane na ekranie . Realizacja takiego zadania z pewnoci
nie bdzie dla nikogo problemem, gdy wszystkie potrzebne wiadomo
ci zostay podane w rozdziale 4. Napiszmy wic krtki fragment kodu.
WICZENIE
C#
1 88
w i cz e n i a
u s i n g Sy stem :
publ i c cl a s s Konten e r
{
pub l i c i n t x :
publ i c i nt y ;
publ i c Konten e r ( i n t x , i n t y )
{
th i s . x
x:
th i s . y
y;
=
publ i c vo i d Show ( )
{
Con sol e . Wr i teli n e ( " x
Con sol e . Wr i teli n e ( "y
{ O }"
{ O }"
x) :
y) ;
WICZENIE
..
Tworzenie delegacji
Rozd z i a 9 .
D e l e g a cj e i zd a rz e n i a
1 89
th i s . x = x :
th i s . y = y ;
C#
1 90
w i cz e n i a
Rozd z i a 9 .
D e l e g a cj e i zd a rz e n i a
1 91
Tym razem zdefiniowane zostay trzy delegacje (ca l l Bac k l , cal l Back2,
ca 1 1 Back3) i trzy funkcje Show (Showl, Show2, Show3), ktre w rny spo
sb wywietlaj dane z obiektu typu Kontene r . Sposb postpowania
jest tu taki sam jak w wiczeniu 9 . 3 . W tym przypadku do obsugi
wywietlania danych z obiektu typu Kontener uywane s po prostu
trzy rne funkcje zdefiniowane w klasie P rogram. Najwaniejsze jest
jednak to, e wywoania metody Show pozwalaj na wykonanie prak
tycznie dowolnego kodu, a nie wymagaj przy tym adnych zmian
w klasie Kontene r .
Efekt dziaania kodu z powyszego wiczenia widoczny jest na ry
sunku 9 . 1 .
Rysunek 9. 1.
Wynik dziaania
trzech rnych
delegacji dla
funkcji Show
1 92
C#
w i cz e n i a
Zd a rzenia
Mechanizm zdarze (ang . events) oparty jest na delegacjach i pozwala,
aby obiekt mg informowa o swoim stanie czy te wanie o wyst
pieniu pewnego zdarzenia. Najczciej wykorzystuje si t moliwo
podczas tworzenia aplikacji z interfejsem graficznym . Wanie przy
uyciu zdarze mona reagowa na kliknicie mysz przycisku czy
wybranie pozycji z menu. Zanim jednak przejdziemy do obsugi zdarze11
w rodowisku okienkowym (co zostanie pokazane w rozdziale 1 O . ) , zo
baczmy, w jaki sposb te mechanizmy dziaaj.
Do definiowania zdarze11 suy sowo kluczowe event. Jednak wczeniej
naley utworzy odpowiadajc zdarzeniu delegacj, a zatem postpo
wanie jest dwuetapowe .
1.
2.
publ 1 c vo 1 d SetX ( 1 n t x )
{
th 1 s . x
x;
=
}
publ 1 c 1 nt GetX ( )
{
return x :
Rozd z i a 9 .
D e l e g a cj e i zd a rz e n i a
1 93
publ i c i nt GetX ( )
{
return x :
1 94
C#
w i cz e n i a
WICZENIE
Rozd z i a 9 .
D e l e g a cj e i zd a rz e n i a
1 95
publ i c i nt GetX ( )
{
return x :
C#
1 96
w i cz e n i a
publ i c cl a s s Program
{
}
Con sol e . Wr i tel i n e ( " D ruga procedura obs ug i zda rzen i a l " ) :
Wykonanie dwch
rnych metod
w odpowiedzi
na zdarzenie
Ko m ponenty
Etykiety (La bel)
Klasa Label suy do tworzenia etykiet, czyli kontrolek uywanych
do wywietlania krtkich napisw. Tekst etykiety moe by zmieniany
przez aplikacj, uytkownik nie ma natomiast moliwoci bezpored
niej jego edycji. Aby skorzysta z etykiety, naley utworzy obiekt
klasy Label oraz doda go do kolekcji Control s okna, na ktrym ta
etykieta ma si znajdowa . W tym celu stosuje si instrukcj Control s .
4-Add ( nazwa_etykiety ) . Wygld oraz zachowanie etykiety mona modyfi
kowa, korzystajc z jej waciwoci, ktre zebrane s w tabeli 1 0 . 1 .
Tabela 10. 1. Wybrane wlaciwoci klasy Label
Ty p
Nazwa
waciwoci
Znaczenie
bool
AutoS 1 ze
Col or
BackCol or
Bo rderStyl e
Bo rderStyl e
Bounds
Bounds
C#
1 98
w i cz e n i a
Nazwa
waciwoci
Znaczenie
Cu rsor
Cu rsor
Font
Font
Col or
Im age
Fo reCol or
He1 ght
Im age
Le ft
Po 1 nt
Locat 1 on
Control
Name
Nazwa etykiety.
Pa rent
s t r 1 ng
Text
ContentA1 1 gnment
TextA1 1 gn
Top
bool
WICZENIE
V1 s 1 bl e
W1 dth
R o z d z i a 1 0. Ko m p o n e n t y
1 99
u s i n g Sy stem :
u s i n g Sy stem . W i n dows . Forms ;
publ i c c l a s s Ma i n Form : Form
th i s . Wi dth = 320 ;
th i s . He i ght = 2 0 0 :
th i s . Text = "Okno z etyk i et" ;
l a bel . Text = " Przy k adowa etyk i eta . . . " ;
l a bel . AutoSi ze = true :
l a bel . Left = ( th i s . C l i entSi ze . W i dt h - l abel . Wi dth ) I 2 ;
l a bel . Top = ( th i s . Cl i en tS i ze . Hei ght - l abel . He i ght ) I 2 ;
th i s . Control s . Add ( l abel ) ;
{
}
Etykieta tekstowa
um1e;scow10na
w centrum okna
ii ...
Okno z etykiet
C#
200
w i cz e n i a
Znaczenie
Bo l d
tekst pogrubiony
Ital i c
tekst pochylony
Regu l a r
tekst zwyczajny
Stri keout
tekst przekrelony
Underl i ne
tekst podkrelony
R o z d z i a 1 0. Ko m p o n e n t y
2o1
Lista czcionek
uzyskana przy
uzyc1u programu
z wiczenia 1 0.2
uyjemy konstrukcji :
new Fon t ( "Couri e r " . 20 . FontStyl e . Bol d ) :
C#
2 02
WICZENIE
w i cz e n i a
th i s . Wi dth = 320 ;
th i s . He i ght = 2 0 0 ;
th i s . Text = "Okno z etyk i et" ;
l a bel . Font = new Fon t ( "Couri e r " , 20 . Fon tStyl e . Bol d ) ;
l a bel . Text = " C zci on k a Couri e r " ;
l a bel . AutoSi ze = true ;
th i s . Control s . Add ( l abel ) ;
l a bel . Left = ( th i s . C l i entSi ze . W i dt h - l abel . Wi dth ) I 2 ;
l a bel . Top = ( th i s . Cl i en tS i ze . Hei ght - l abel . He i ght ) I 2 ;
{
}
Rysunek 1 0. 3.
Etykieta, na ktrej
uyto czcionki
Courier o wielkoci
20 punktw
ii...,
Okno
etykiet
C z c i o nka
Cour i e r
R o z d z i a 1 0. Ko m p o n e n t y
2 03
Przyciski (Button)
Klasa Button pozwala na tworzenie standardowych przyciskw z do
wolnymi napisami. Aby z niej skorzysta, naley utworzy nowy
obiekt tej klasy, ustali jego pooenie oraz napisa procedur obsugi
zdarze (wykonywan po klikniciu przycisku) . Przycisk umiejscawia
my w oknie ; wykorzystujemy tu waciwoci Top oraz Left, podobnie
jak w innych komponentach (np . etykietach) . Przydatne waciwoci
klasy Button przedstawione s w tabeli 1 0 . 3 .
Tabela 10. 3. Wybrane wlaciwoci klasy Button
Ty p
Nazwa waciwoci
Znaczenie
Col or
Back Col or
Bounds
Bounds
Cu rsor
Cu rsor
Fl atStyl e
Fl atStyl e
Font
Font
Co l o r
Im age
Fo reCo l or
He1 ght
I mage
Left
Po 1 nt
Locat 1 on
Control
Name
Nazwa przycisku.
Pa rent
S1 ze
2 04
C#
w i cz e n i a
Nazwa waciwoci
Znaczenie
s t r i ng
Text
Con tent
._Al i gnment
TextAl i gn
i nt
Top
bool
Vi s i bl e
i nt
Wi dth
WICZENIE
th i s . Wi dth = 320 ;
th i s . He i ght = 2 0 0 :
th i s . Text = "Okno z p rzyc i s k i em" :
button . Top = 60 :
bu tton . Left = 120 :
th i s . Control s . Add( button ) :
{
}
205
R o z d z i a 1 0. Ko m p o n e n t y
Rysunek 1 0.4.
Przycisk dodany
w glwnym oknie
aplikacji
th 1 s . W1 dth = 320 :
th 1 s . He 1 ght = 2 0 0 :
th 1 s . Text = "Okno z przyc 1 s k 1 em " :
button . Top = 60 :
bu tton . Left = 120 :
bu tton . Text = " K l 1 kn 1 j mn 1 e 1 " :
EventHandl er eh = n ew EventHandl er ( th 1 s . Cl oseC1 1 cked ) :
bu tton . C l 1 c k += eh :
th 1 s . Control s . Add( button ) :
C#
2 06
w i cz e n i a
th i s . C l o s e ( ) :
}
}
Tekst na przycisku zosta zdefiniowany za pomoc waciwoci Text.
Powsta take obiekt typu EventHandl er powizany z metod Cl oseCl i cked.
Metoda ta ma dwa argumenty. Pierwszy (s ender) wskazuje obiekt b
dcy rdem zdarzenia (w tym przypadku jest to przycisk button),
drugi (e) zawiera informacje powizane ze zdarzeniem (np . wsp
rzdne kliknicia) . Te dane nie s jednak uywane . Jedynym dziaaniem
metody Cl oseCl i cked jest zamknicie okna aplikacji (wywoanie metody
Cl ose) . Procedura obsugi zdarzenia jest wizana ze zdarzeniem (wa
ciwo Cl i ck przycisku) w instrukcji:
button . Cl i c k += eh :
R o z d z i a 1 0. Ko m p o n e n t y
207
Nazwa
waciwoci
Znaczenie
bool
AutoS 1 ze
Col or
BackCol or
I mage
Background I mage
BorderStyl e
BorderStyl e
Bounds
Bounds
Cu rsor
Cu r s o r
Font
Font
Col or
ForeCol or
He1 ght
Le ft
str1 n g [ J
L 1 nes
Po 1 nt
Locat 1 on
Maxlength
bool
Mod1 f1 ed
bool
Mu l t1 1 1 ne
s t r 1 ng
N a me
Control
Pa rent
C#
2 08
w i cz e n i a
Nazwa
waciwoci
Znaczenie
Char
Pas swordCh a r
na fa l se .
bool
Rea dOn l y
s t r i ng
Sel ectedText
i nt
i nt
Si ze
Si ze
s t r i ng
Text
Con tent
'-+Al i gnment
TextAl i gn
i nt
Top
bool
Vi s i bl e
i nt
Wi dth
bool
WordWrap
R o z d z i a 1 0. Ko m p o n e n t y
WICZENIE
209
th i s . Wi dth = 320 :
th i s . He i ght = 2 0 0 :
th i s . Text = "Apl i k acj a " :
bu tton . Top = 120 :
bu tton . Left = ( th i s . Cl i en tS i ze . Wi dth - button . W i dth ) I 2 ;
bu tton . Text = " K l i kn i j mn i e l " ;
textBox . Top = 60 :
textBox . Left = ( th i s . C l i entSi ze . W i dth - textBox . Wi dth ) I 2 ;
EventHandl er eh = n ew EventHandl er ( th i s . Bu ttonC l i cked ) ;
bu tton . C l i c k += eh :
th i s . Control s . Add( button ) :
th i s . Control s . Add( textBox ) ;
{
}
C#
210
WICZENIE
w i cz e n i a
th i s . Wi dth = 320 :
th i s . He i ght = 2 0 0 :
th i s . Text = "Apl i k acj a " :
button . Top = 60 :
bu tton . Left = ( th i s . Cl i en tS i ze . Wi dth - button . W i dth ) I 2 :
bu tton . Text = " K l i kn i j mn i e l " :
l a bel
l a bel
l a bel
l a bel
. Top = 30 :
. Text = " Etyk i eta " :
. TextAl i gn = ContentAl i gnment . Mi ddl eCente r :
. Left = ( th i s . C l i entSi ze . W i dt h - l abel . Wi dth ) I 2 :
{
}
21 1
R o z d z i a 1 0. Ko m p o n e n t y
Rysunek 1 0. 5.
a..,
Ap l i kacj a
-----
G:JI
Test prQQramu.
I Kl i knij mnie!
IT
est programu .
212
C#
w i cz e n i a
Typ
Znaczenie
AutoCheck
bool
BackCo l or
Col or
Bounds
Bounds
C h ecked
bool
C h eckState
CheckState
Cu rsor
Cursor
Fl atStyl e
F l atStyl e
Font
Font
Fo reCo l or
Col or
He1 ght
1 nt
Le ft
1 nt
Locat1 on
Po1 nt
Na me
s t 1 ng
Nazwa pola.
Pa rent
Control
S1 ze
S 1 ze
Text
str1 ng
TextA1 1 gn
Con tent
'-+Al 1 gnment
Th reeState
bool
Top
1 nt
V1 s 1 bl e
bool
W1 dth
1 nt
R o z d z i a 1 0. Ko m p o n e n t y
213
th i s . Wi dth = 320 :
th i s . He i ght = 2 0 0 :
th i s . Text = " Pol a wyboru " ;
bu tton . Top = 120 :
bu tton . Left = ( th i s . Cl i en tS i ze . Wi dth - button . W i dth ) I 2 ;
bu tton . Text = " K l i kn i j mn i e l " ;
c h b l = n ew Check Box( ) ;
c h b l . Left = 120 :
c h b l . Top = 20 :
c h b l . Text = "CheckBox n r l " ;
chb2 = n ew Check Box( ) ;
chb2 . Left = 120 :
chb2 . Top = 40 :
chb2 . Text = "CheckBox n r 2" :
c h b3 = n ew Check Box( ) ;
c h b3 . Left = 120 :
c h b3 . Top = 60 :
c h b3 . Text = "CheckBox n r 3" :
EventHandl er eh = n ew EventHandl er ( th i s . Bu ttonC l i cked ) ;
bu tton . C l i c k += eh ;
th i s . Control s . Add( button ) ;
th i s . Control s . Add ( ch b l ) ;
214
C#
w i cz e n i a
" " s2
s t r i ng s l
i f ( ch b l . Checked )
=
sl
""
s3
"" ;
" 1 ":
i f ( chb2 . Checked )
s2
" 2 ":
i f ( chb3 . Checked )
s3
" 3 ":
{
}
215
R o z d z i a 1 0. Ko m p o n e n t y
Rysunek 1 0. 6.
wiczenie
ii'51 P o l a wyb o ru
obrazujce
wykorzystanie
pl wyboru typ u
CheckBox
r Oh:eclkBox: n r 1
r Oh:eclkBox: n r 2
r Oh:eclkBox: rr r 3
I Kl i kn ij mnie! I
WICZENIE
Umie w oknie trzy obiekty klasy Rad i o Button oraz przycisk. Po klikni
ciu przycisku wywietl informacj, ktra z opcji zostaa zaznaczona .
u s i n g Sy stem ;
u s i ng Sy stem . Drawi ng ;
u s i n g Sy stem . W i n dows . Forms ;
publ i c c l a s s Ma i n Form : Form
th i s . Wi dth = 320 ;
th i s . He i ght = 2 0 0 ;
th i s . Text = " Pol a wyboru " ;
bu tton . Top = 120 ;
bu tton . Left = ( th i s . Cl i en tS i ze . Wi dth - button . W i dth ) I 2 ;
bu tton . Text = " K l i kn i j mn i e l " ;
rb l = new Radi oButton ( ) ;
rb 1 . Left = 120 ;
rb l . Top = 20 ;
rb l . Text = "Opcj a n r 1 " ;
rb2 = new Radi oButton ( ) ;
rb2 . Left = 120 ;
rb2 . Top = 40 ;
rb2 . Text = "Opcj a n r 2" ;
rb3 = new Radi oButton ( ) ;
rb3 . Left = 120 ;
C#
216
w i cz e n i a
rb3 . Top = 60 :
rb3 . Text = "Opcj a n r 3" ;
EventHandl er eh = n ew EventHandl er ( th 1 s . Bu ttonC 1 1 cked ) ;
bu tton . C l 1 c k += eh ;
th 1 s . Control s . Add( button ) :
th 1 s . Control s . Add ( rb l ) ;
th 1 s . Control s . Add( rb2 ) ;
th 1 s . Control s . Add( rb3 ) ;
{
}
sl = " 1 " ;
el se 1 f ( rb2 . Checked )
s2 = " 2 " ;
el se 1 f ( rb3 . Checked )
s3 = " 3 " :
{
}
R o z d z i a 1 0. Ko m p o n e n t y
217
Nazwa waciwoci
Znaczenie
Co l o r
BackCo l or
Bounds
Bounds
Cu rsor
Cursor
Font
Font
Co l o r
ForeCol or
1 nt
He1 ght
1 nt
I temHe 1 ght
I tems
1 nt
Left
Po 1 nt
Locat1 on
C#
218
w i cz e n i a
Nazwa waciwoci
Znaczenie
Int
MaxDropDown i tems
Maxlength
Control
Na me
Nazwa listy.
Pa ren t
Referencja do obiektu
zawierajcego list.
obj ect
bool
Sorted
Text
Top
bool
Vi s i b l e
Wi dth
):
R o z d z i a 1 0. Ko m p o n e n t y
219
th i s . Wi dth = 320 :
th i s . He i ght = 2 0 0 :
th i s . Text = " L i sta rozwi j an a " ;
cb . I tems . AddRange
(
new obj ect [ J
);
cb . Wi dth = 200 ;
cb . Left = ( th i s . Cl i entSi ze . Wi dth - cb . W i dt h ) I 2 ;
cb . Top = ( th i s . C l i entSi ze . Hei ght - cb . Hei ght ) I 2 ;
EventHandl er eh = n ew EventHandl er ( th i s . On Se l ecti on ) ;
cb . Sel ected i n dexChanged += eh :
th i s . Control s . Add ( cb ) ;
}
publ i c vo i d OnSel ecti on ( Obj ect sende r . EventArgs e )
}
publ i c stati c voi d M a i n ( )
C#
220
{
}
w i cz e n i a
Rysunek 1 0. 7.
Element ComboBox
utworzony
w wiczeniu 1 0. 1 0
i;i...
L i sta rozwij a n a
----
G:Jl @) I
ar Pre
JavaScript. Prcktyczny kurs
Tworznie stron 1l1Nl/'W. Prarczny kurs
P H P 5. Pra rcz kurs
221
R o z d z i a 1 0. Ko m p o n e n t y
Typ
Znaczenie
Mu l t 1 Col umn
bool
mog by wywietlane
w wielu kolumnach.
Scrol l Al waysV 1 s 1 b l e
bool
Lista zawierajca
wszystkie zaznaczone
elementy.
222
C#
w i cz e n i a
b
ll1l-L-is-ta w-ie_l_ok_r_ot_n_e-go w-y-_o r_u
WICZENIE
L i stBox l b = n ew L i stBox( ) :
Button button = new Button ( ) :
publ i c Ma i n Form ( )
th i s . Wi dth = 320 :
th i s . He i ght = 2 0 0 :
th i s . Text = " L i sta e l emen tw" :
bu tton . Top = 140 :
bu tton . Left = ( th i s . Cl i en tS i ze . Wi dth - button . W i dth ) I 2 :
bu tton . Text = " K l i kn i j mn i e l " ;
l b . I tems . AddRange
(
new obj ect [ J
);
l b . Wi dth = 200 ;
l b . Left = ( th i s . Cl i entSi ze . Wi dth - l b . W i dt h ) I 2 :
l b . Top = ( th i s . C l i entSi ze . Hei ght - l b . He i ght ) I 2 ;
l b . Sel ecti on Mode = Sel ecti onMode . M u l ti Extended :
EventHandl er eh = n ew EventHandl er ( th i s . On ButtonCl i c k ) ;
bu tton . C l i c k += eh :
th i s . Control s . Add( l b ) :
th i s . Control s . Add ( button ) :
223
R o z d z i a 1 0. Ko m p o n e n t y
s t r 1 ng str = " " :
fo reach ( st r 1 ng n ame 1 n l b . Sel ected l tem s )
{
}
Lista tworzona jest na takiej samej zasadzie jak w wiczeniu 1 0 . 1 0 jedynie zamiast klasy ComboBox zostaa uyta L i stBox. Dodatkowo w oknie
zosta rwnie umieszczony przycisk typu Butto n (wygld aplikacji
mona zobaczy na rysunku 10 .8) . Lista jest reprezentowana przez
pole l b. Aby moliwe byo zaznaczanie wielu elementw, waci
wo Sel ecti onMode otrzymaa warto Sel ecti onMod e . Mul ti Extended .
Kliknicie przycisku button bdzie powodowao wywoanie metody
On ButtonCl i c k . W jej wntrzu znajduje si ptla fo reach odczytujca
wszystkie elementy waciwoci Sel eted ltems listy l b. Kady taki ele
ment odpowiada pojedynczej zaznaczonej pozycji. Wewntrz ptli kon
struowany jest cig znakw str skadajcy si z zaznaczonych pozycji
(elementw kolekcji Se l ected I tems) . Po zakoi1czeniu ptli cig zapisany
w str jest wywietlany na ekranie w osobnym oknie dialogowym.
Rysunek 1 0. 8.
Lista pracujca
w tiybie
MultiExtended
z wiczenia 1 0. 1 1
ii...,
1
---- @1 1
224
C#
w i cz e n i a
Menu
Czym s menu, z pewnoci nie trzeba nikomu przypomina . Czas
zatem nauczy si, w jaki sposb skorzysta z tych poytecznych
elementw interfejsu w C# na platformie .NET. Do dyspozycji s za
rwno menu gwne, jak i menu kontekstowe . Do ich tworzenia su
klasy Mai nMenu, ContextMenu oraz Menultem. Wszystkie znajduj si w prze
strzeni nazw Wi ndows . System . Fo rms .
Menu gwne
Aby doda do aplikacji menu gwne, trzeba wykona kilka czynnoci.
Przede wszystkim naley utworzy obiekt klasy Ma i nMenu i przypisa
go waciwoci Menu obiektu klasy Form. W ten sposb do aplikacji zosta
nie dodane menu gwne , ktre jednak nie bdzie zawierao adnej
pozycji. W celu utworzenia pozycji budujemy obiekt klasy Men u l tem
i dodajemy go do menu gwnego za pomoc metody Add . Schemat
postpowania jest zatem nastpujcy:
Ma i nMenu ob i ekt menu = new M a i nMen u ( ) :
Men u l tem ob i ekt_pozycj i = n ew Men u l tem ( ) :
ob i ek t_menu . Menu l tems . Acid ( ob i ekt_pozycj i ) :
WICZENIE
R o z d z i a 1 0. Ko m p o n e n t y
225
{
}
Rysunek 1 0. 9.
Aplikacja zawierajca
menu glwne
D_.
Okno z menu
,[ P Tik l
C#
226
w i cz e n i a
{
}
Rysunek 1 0. 10.
Aplikacja ma teraz
dodatkowe podmenu
G:JI @) I
aEJ O kn o z menu
[Plikl
I_
Zamknij
R o z d z i a 1 0. Ko m p o n e n t y
227
WICZENIE
{
}
C#
228
w i cz e n i a
R o z d z i a 1 0. Ko m p o n e n t y
229
{
}
t h i s . Cl o s e ( ) ;
}
Pozostaje zatem powizanie takiej metody ze zdarzeniem polegajcym
na wybraniu pozycji Zamkni j . Naley utworzy delegacj typu Event
4-Handl e r i przekaza jej w postaci argumentu metod Zamkni jCl i cked :
EventHandl er eh = new EventHa n d l e r ( Zamkn i j C l i c ked ) ;
WICZENIE
Aktywacja menu
C#
230
w i cz e n i a
th i s . C l o s e ( ) :
{
}
WICZENIE
1 0. 1 7
R o z d z i a 1 0. Ko m p o n e n t y
231
{
}
2 32
C#
Rysunek 1 0. 1 1.
11
Struktura menu
utworzona
w wiczeniu 1 0. 1 7
Okno
w i cz e n i a
z
Pozycja 1
menu
Pozycja 3 ]
Pozycja 2
Podpozycja 1
Podpozycja 2
Podpozycja 3
Rysunek 1 0. 12.
11
Wybranie dowolnej
pozycji podmenu
powoduje
wywietlenie
;e; nazwy
Okno z menu
-.!:ozycja 1
GJ[fil[fil
P ==-..
Podpozycja1 3
OK
Menu ko ntekstowe
Tworzenie menu kontekstowego jest bardzo podobne do budowania
menu gwnego . Struktur definiuje si dokadnie w taki sam sposb .
Rnica jest taka, e zamiast przypisania :
Form . Menu
nasze menu :
nasze menu :
233
R o z d z i a 1 0. Ko m p o n e n t y
WICZENIE
men u l teml
men u l tem2
men u l tem3
men u l tem4
=
=
=
=
l" )
2" )
3" )
4" )
:
:
:
:
{
}
C#
234
Rysunek 1 0. 13.
Aplikacja
posiadajca
menu kontekstowe
ii...,
Okno
w i cz e n i a
z
menu kontekstowym
P ozycj a 1
P ozycj a 2.
P ozycj a 3
P ozycj a 4
menu4Sub l tem l :
menu4Sub l tem2 :
men u4Su b l tem3 :
men u4Su b l tem4 :
235
R o z d z i a 1 0. Ko m p o n e n t y
men u i teml
men u i tem2
men u i tem3
men u i tem4
1" ) ;
2" ) ;
3" ) ;
4" ) ;
1" ) :
2" ) :
3" ) :
4" ) :
contextMen u ;
{
}
Rysunek 1 0. 14.
Aplikacja
z wielopoziomowym
menu kontekstowym
"
Okno
menu kontekstowym
l a l
Pozycja 1
Pozycja 2
Pozycja 3
Podpozycja 1
Pozycja 4
Podpozycja 2
Podpozycja 3
Podpozycja 4
li
Waciwoci Menu
W menu zarwno gwnym, jak i kontekstowym istnieje moliwo
zaznaczania kadej pozycji. Odbywa si to poprzez zmian waci
woci Checked obiektu klasy Men u l tem na true (pozycja zaznaczona)
lub fa l se (pozycja niezaznaczona) .
C#
236
WICZENIE
w i cz e n i a
{
}
Rysunek 1 0. 15.
Menu kontekstowe
z zaznaczonymi
niektrymi
pozyCJam1
P o-zycja 1
./
P ozycja 3
P o,zycja 2
P o,zycja 4
l" ) ;
2" ) ;
3" ) ;
4" ) ;
R o z d z i a 1 0. Ko m p o n e n t y
237
----,
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
w
.
l
_
ll1fl_Me n u z m oz i o ci q zm ia n y zazna czen
WICZENIE
M a i n Menu
Men u l tem
Men u l tem
Men u l tem
Men u l tem
Men u l tem
publ i c Ma i n Form ( )
C#
238
menuSub I tem4
th i s . Menu
w i cz e n i a
m a i n Men u ;
{
}
239
R o z d z i a 1 0. Ko m p o n e n t y
u s i n g Sy stem :
u s i n g Sy stem . W i n dows . Forms ;
publ i c c l a s s Ma i n Form : Form
M a i n Menu
Men u l tem
Men u l tem
Men u l tem
Men u l tem
Men u l tem
publ i c Ma i n Form ( )
l" ,
2" ,
3" ,
4" ,
eh )
eh )
eh )
eh )
;
:
:
:
el se
C#
240
{
}
w i cz e n i a
Rysunek 1 0. 16.
Elementy menu
zaznaczane
za pomocq
symbolu kropki
Il_,
Okno z menu
Menl!J l ]
./
P nycj a 1
P ozycj a 2
Ciii
Ciii
P ozycj a 3
P ozycj a 4
R o z d z i a 1 0. Ko m p o n e n t y
WICZENIE
241
men u l teml
m a i n Menu . Menu i tems . Add ( "&P l i k " ) :
EventHandl er eh = n ew EventHandl er ( th i s . Zamkn i j C l i cked ) ;
men u l tem2
men u l tem l . Men u l tems . Ad d ( "&Zamkn i j " , eh ) ;
th i s . Menu
m a i n Men u :
=
th i s . C l o s e ( ) ;
{
}
2 42
C#
Rysunek 1 0. 1 7.
Menu dostpne
poprzez skrty
klawiszowe
z klawiszem Alt
w i cz e n i a
243
R o z d z i a 1 0. Ko m p o n e n t y
u s i n g Sy stem :
u s i n g Sy stem . W i n dows . Forms ;
publ i c c l a s s Ma i n Form : Form
th i s . C l o s e ( ) ;
{
}
Menu z przypisanym
skrtem kl.awiaturowym
ii..,
Okno z menu
Zamknij
1 @1 1
----
Ctrl + \!\1
244
C#
w i cz e n i a
th i s . C l o s e ( ) :
{
}
Notatki