Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

SKŁADNIA JĘZYKA Instrukcja sw i t c h (wyboru) zastępuje szereg instrukcji i f, Pętla wh i 1 e ma następującą składnię:

jeśli wszystkie odnoszą się do tej samej zmiennej. w h ile ( warunek)


• przypisania,
Podstawowe typy danych • inne. Przykład:
I I instrukcje
Instrukcje w pętli są wykonywane dopóty, dopóki iva runek ma
(wybrane) Operatory arytmetyczne znamy z życia codziennego. Są to: s w it c h (w) wartość t r u e . Należy zwrócić uwagę, że pętla może nie zostać
• + (dodawanie); wykonana ani razu!
Pomzsze typy są typami C#; w większości ich nazwy pokrywają się • - (odejmowanie); ca se 0:
z nazwami typów .NET (z tą różnicą, iż typy w .NET zaczynają się Kolejnym wariantem tej pętli jest pętla d o . . wh i 1 e. Jedyną różnicę
• * (mnożenie); // instrukcje między nimi stanowi umiejscowienie warunku — w tym wypadku
od wielkiej litery, np. Byte ).
• / (dzielenie); b re a k ; znajduje się on po bloku instrukcji:
b y te (I bajt) — typcalkowitoliczbowy, zakres: od 0 do 255.
• % (modulo, reszta z dzielenia); c a s e 1: do
sh o rt (2 bajty) — typ calkowitoliczbowy, zakres; od -32 768
• ++ (zwiększa wartość zmiennej o jeden); U kolejne instrukcje // instrukcje
do 32 767.
• - - (zmniejsza wartość zmiennej o jeden). b re a k ; w h ile (warunek)-,
i nt (4 bajty) — typ calkowitoliczbowy, zakres:
d e f a u lt :
od-2 147 483 648 do 2 (47483 647. Dzielenie dwóch liczb całkowitych (np. typu i nt) zwraca
1 o ng (8 bajtów) — typ calkowitoliczbowy, wynik całkowity (np. 5/3 = I). jeśli chcemy uzyskać wynik
I I inne instrukcje
b re a k ;
Tablice
zakres: od-9 223 372 036 854 775 808 realny, trzeba np. dodać do licznika lub mianownika wartość Do przechowywania wielu elementów tego samego typu używa się
}
do 9 223 372 036 854 775 807. pu zmiennoprzecinkowego
typu zmiennopi (najszybciej 0.0), np.: wyrażenie zmiennych tablicowych. Tablicę tworzy się z użyciem operatora new, np.:
f lo a t (4 bajty)— n azw aw .N ETSingle.Typ ( 5 + 0 . 0 ) /33 zwróci wynik 1,86666666666667 (w przybliżeniu). Zmienna w może być typu calkowitoliczbowego, znakowego lub i n t [ ] t a b l i c a = new i n t [ 5 ] ;
zmiennoprzecinkowy pojedynczej precyzji (do 7 cyfr być łańcuchem znaków. Instrukcje wewnątrz danej klauzuli c a s e Powyższa instrukcja utworzy 5-elementową tablicę liczb całkowitych.
znaczących). Zakres: od ±l.5e-4S do ±3.4e38. Operatory logiczne zwracają wartość typu b oo l ean, uzależniając ją zostaną wykonane, jeśli zmienna w będzie miała wartość określoną Aby korzystać z tablicy, należy używać indeksu tablicy ujętego
Wymagane jest dołączenie za wartością tego typu od podanych operandów. w klauzuli. Każda instrukcja c a s e musi kończyć się instrukcją w nawiasy kwadratowe:
litery F, np. 3.14F. (w l && w2) — zwróci t r u e , jeśli w l i w2 mają wartość b r e a k ;. Przeciwnie niż w języku C + + nie jest możliwe „spadanie" t a b l i c a [0 ] = 3 ;
d o u b l e (8 bajtów) — typ zmiennoprzecinkowy podwójnej t r u e (suma logiczna). między poszczególnymi instrukcjami ca se . Jeśli żaden z określonych i n t l i c z b a = t a b l i ca [ 0 ] ;
precyzji (do 15-16 cyfr znaczących), Zakres: (w l || w2) — zwróci t r u e , jeśli w l lub w2 ma wartość warunków nie zostanie spełniony, wykonywane są instrukcje z sekcji Tablice w języku C# są indeksowane od 0, tj. w tablicy n-elementowej
od ±5.0e-324 do ±/.7e308. Jest to domyślny typ t r u e (alternatywa logiczna). d e f a u lt . możemy odwoływać się do elementów o indeksach od 0 do n-/
dla liczb zmiennoprzecinkowych, nie wymaga sufiksu. ( l w i ) — zwróci t r u e , jeśli w l ma wartość f a l se Kolejną często wykorzystywaną konstrukcją są pętle. Pętla to blok Podobnie jak zwykle zmienne tablice również mogą mieć wartości
d e c i ma 1 (16 bajtów) — typ zmiennoprzecinkowy. (negacja logiczna). instrukcji kodu, który jest wykonywany cyklicznie. C # oferuje trzy przypisywane przy ich utworzeniu, np.:
Używany do operacji wymagających dużych liczb (w l ~ w2) — zwróci tr u e , jeśli tylko jedna z wartości ma rodzaje pętli: f o r , whi 1 e, d o . .w h i 1 e. i n t [ ] t a b l i c a = new i n t [] { 3 , 5 , 7 ) ;
i dużego bezpieczeństwa przy modyfikacji zmiennych. wartość t r u e (rozłączna alternatywa logiczna). Pętla f o r jest używana, kiedy znamy liczbę przebiegów pętli. W takiej sytuacji można pominąć rozmiar tablicy; w nawiasach
Zakres: od ±/.0e-28 do ....................... Operatory bitowe wykonują operacje na liczbach w postaci klamrowych wystarczy podać kolejne wartości, jakie mają znaleźć się
litery m, np. 9.5m. bitowej (system dwójkowy). Można je też wykorzystywać zamiast Przykład: w tablicy (oddzielone przecinkami).
ch ar (2 bajty) — typ znakowy. Służy do przechowywania analogicznych operatorów logicznych. f o r ( i n t l i c z n i k = 0 ; l i c z n i k < 10;
C # podobnie jak inne języki programowania daje możliwość tworzenia
pojedynczych znaków Unicode. Znaki są zapisywane (w l & w 2 )— sumabitowa. l i c z n i k+ + ) I I instrukcje
tablic wielowymiarowych. W tym celu w momencie deklarowania
w apostrofach, np. ' a ' . (w l | w 2 )— alternatywabitowa. tablicy należy w nawiasach klamrowych wpisać n-f przecinków,
(w l A w2) — rozłącznaalternatywa bitowa. Powyższa pętla wykona się 10 razy. Dodatkowo wewnątrz bloku
b ool (I bajt) — typ logiczny. Zmienne tego typu przechowują gdzie n jest liczbą określającą, ile wymiarów ma mieć tablica:
wartość logiczną— prawda (tru e ) lub fałsz ( f a l se). ( -w 1) — negacja bitowa (nie może być zastosowana do wartości instrukcji można wykorzystywać wartość zmiennej 1 i c z n i k,
np. do wyświetlania jego wartości na ekranie. W pierwszej części i n t [ , , ] t a b lic a ;
Ponadto dostępne są typy u i n t, u s h o r t i u 1 ong (liczby logicznych). W ten sposób powstanie tablica trójwymiarowa. Podczas tworzenia
bez znaków), które mają dwukrotnie większy zakres liczb (w l » w 2 )— przesunięcie bitowe w prawo — przesuwa lewy pętli inicjujemy zmienną ¡terującą, drugą stanowi warunek; musi on
zwracać wartość t rue , aby pętla kontynuowała działanie. W ostatniej takiej tablicy musimy podać długości tablicy w poszczególnych
dodatnich od swoich tradycyjnych odpowiedników (np. u s h o r t operand w prawo o liczbę bitów podaną w operandzie w2 wymiarach w sposób następujący:
- o d Odo 65 535). (usuwa ostatnie bity liczby). części pętli określamy, jak ma się zwiększać (lub zmniejszać) zmienna
iteracyjna (w powyższym przykładzie — o jeden). t a b l i c a = new i n t [ 2 , 3 , 4 ] ;
( w1 « w2) — przesunięcie bitowe w lewo — przesuwa lewy Indeks tablicy jest podawany w analogiczny sposób, jak jej wymiary
Istnieje możliwość pominięcia dowolnej części pętli; jeśli zachodzi
Komentarze operand o liczbę bitów podaną w operandzie w2 (uzupełnia zerami
konieczność, aby pętla wykonpala się nieskończoną ilość razy, można w konstruktorze, np.1
postać bitową). t a b li c a [2 ,2 ,1 ] = 5;
Komentarze pozwalają na dodanie uwag do kodu. Nie są one użyć zapisu:
Operatory relacji umożliwiają porównanie dwóch wartości. Istnieje możliwość przypisania tablicy wielowymiarowej przy
przetwarzane przez kompilator. Wyróżniamy dwa rodzaje fo r ( ; ; )
Wynik takiego porównania jest typu b o o l. utworzeniu, np.:
komentarzy: I I instrukcje
(w l == w 2 )— zwraca t r u e , jeśli obydwie wartości są równe, i n t [ , ] t a b l i c a = new i n t [ , ] { { 1 , 3
I I komentarz wjednej linijce Pozostałe dwa rodzaje pętli są używane w sytuacjach, gdy nie jest
(w l != w2) — zwracatrue.jeśliobydwiewartościsąróżne. } , ( 4 , 6 } , { 7 , 9 } , { 1 0 , 12 } } ;
I* (w l > w2) — zwraca t r u e , jeśli w l jest większe od w2. z góry określone, ile razy pętle mają być wykonywane.
Komentarz
(w l >= w2) — zwracatrue,jeśliwljestwiększelubrównew2.
iv dwóch i większej liczbie
Dwa ostatnie operatory można stosować w odwrotny sposób, tj. < i <=.
linijek
V
Operatory przypisania umożliwiają zastąpienie przypisania KLASY
zmieniającego wartość zmiennej, np.:
x = x + 5; Klasa jest podstawową formą reprezentowania danych i dostarczania p u b l i c v o id M e to d a (out int waga)
Instrukcje na postać: funkcjonalności do programów. Klasy reprezentują różnego rodzaju {
Instrukcją jest każda czynność wykonywana w ramach programu. x += 5 ; obiekty, np. komponenty graficzne takie jak przycisk czy pole tekstowe waga = 3 ;
Zazwyczaj kończy się średnikiem: W analogiczny sposób można używać operatorów: -= ,* = , /=,% =, lub złożone mechanizmy obsługi baz danych. Również podstawowe 1
instrukcja-, &=, | =, A =, « = , » = , typy danych, opisane powyżej, są klasami. p u b l i c v o id In n a M e t o d a (r e f int waga)
Pojedynczą instrukcję można zastąpić blokiem instrukcji, czyli ciągiem Pozostałe wybrane operatory: Klasa jest też rodzajem definicji. Konkretny egzemplarz (nazywany też {
pojedynczych instrukcji ujętych w nawiasy klamrowe: . — operator dostępu do elementów przestrzeni nazw lub klasy, instancją) klasy, o określonej pozycji i opisie tekstowym, np. przycisk waga = 5 ;
np. o b ie k t .m e t o d a ( ) ; znajdujący się w programie, nazywany jest obiektem. }
in s t r u k c ja l ; [] — operator dostępu do elementów indeksowanych, np. tablic Programista może deklarować własne klasy W tym celu należy użyć p u b l i c v o id T e s t ()
instru kcja 2 \ lub atrybutów, np. t a b l i ca [0 ] ; słowa kluczowego c l a ss: (
in s tru k c ja 3 ; ?: — operatortrójargumentowy— np. i n t X = c l a s s C z ło w ie k i n t a rg u m e n t, a rgu m e n t2 = 3 ;
) ( i > 1) ? 3 : 0. M e to d a (o u t argument);
{
Zmienna x będzie miała wartość 3, jeśli i będzie większe od 1, In n a M e t o d a (r e f argument2);
}
Zmienne w przeciwnym razie x będzie równe 0.
Operatory posiadają swoje priorytety; niektóre z nich są zgodne
Po słowie kluczowym c l a s s umieszczamy nazwę klasy, a następnie )
blok instrukcji zawierających deklarację klasy. Modyfikatory różnią się tym, że zmienna z modyfikatorem o u t
Zmienne deklaruje się, umieszczając nazwę typu oraz nazwę zmiennej. z zasadami matematyki (dzielenie jest wykonywane przed dodawaniem nie musi być wcześniej inicjalizowana, a zmienna z modyfikatorem
Każdą deklarację (podobnie jak inne instrukcje języka C#) kończy
się średnikiem.
itd.). Poznane operatory można uszeregować w następujący sposób Pola i m eto d y r e f — musi. Co więcej, w przypadku parametru z modyfikatorem
według priorytetu operatora: o u t istnieje założenie, ze po zakończeniu działania metody
Najważniejszymi elementami klasy są zmienne klasy (nazywane też
polami) i metody klasy. Metoda to blok instrukcji mogący przyjąć przekazany argument będzie miał określoną wartość. W związku
Przykład:
określone parametry, zwracający określoną wartość. W językach z tym wewnątrz metody musi istnieć instrukcja, która przypisze jakąś
in t lic z b a ;
zorientowanych proceduralnie (jak np. C) metody noszą nazwę funkcji. wartość do parametru z modyfikatorem o u t. Dodatkowo parametry
Nazwa zmiennej może składać się z cyfr, liter i znaku podkreślenia,
przekazywane przez referencję muszą zawierać modyfikatory r e f
przy czym nie może zaczynać się od cyfry. JA. Deklaracja metody składa się z nagłówka oraz ciała:
i o u t w momencie wywołania metod.
Zmiennej przypisuje się wartość za pomocą znaku = i n t D o d a j ( i n t l i c z b a l , i n t 1 ic z b a 2 )
(operator przypisania), np.: Tablice parametrów
lic z b a = 5; i n t w y n ik = l i c z b a l + l i c z b a 2 ; Tablice parametrów pozwalają na przekazywanie do metody dowolnej
Zmienne można zadeklarować i przypisać im wartość w jednej r e t u r n w y n ik ; liczby parametrów (po przecinku). Wewnątrz metody są one widoczne
instrukcji: } w postaci tablicy parametrów;
in t lic z b a = 5; Nagłówek metody zawiera typ zwracanej wartości oraz nazwę p u b l i c v o id M e to d a P a ra m e try (p a ra m s
Za pomocą jednej instrukcji można przypisać dwóm zmiennym jedną metody. Następnie znajduje się lista przyjmowanych argumentów. o b j e c t [ ] o b ie k t y )
wartość, np.: Jeśli metoda nie pobiera argumentów, należy zapisać tylko puste (
in t l i c z b a , in n a _ ! ic z b a ; nawiasy; ( ) . Każdy argument składa się z nazwy typu oraz nazwy f o r ( in t i = 0 ; i < o b ie k t y .L e n gth ;
lic z b a = in n a _ lic z b a = 3 ; argumentu. Po nagłówku występuje blok instrukcji, w którym 1++)
W obrębie metod (więcej na ich temat w dalszych sekcjach) istnieje
możliwość deklarowania zmiennych typowanych niejawnie:
ii musi wystąpić instrukcja r e t u r n . Powoduje ona zakończenie C o n s o le . W r i t e L i n e ( o b i e k t y [ i ] ) ;
wykonywania metody (wszelkie instrukcje znajdujące się za nią nie }
v a r lic z b a = 3; Z punktu widzenia metody mamy do czynienia z najzwyklejszą
zostaną wykonane) i zwrócenie podanej wartości. Metoda może nie
Trzeba pamiętać, że w przeciwieństwie do języków takich jakJavaScript 1=
zwracać żadnej wartości; zamiast typu danych jest używane słowo tablicą. Dopuszczalne wywołania metody nie mają jednak z tablicą
powyższy zapis deklaruje zmienną silnie typowaną, przy czym ów typ Imwyżej operator znajduje się na powyższej liście, tym większy jest
kluczowe v o i d. W tym przypadku użycie słowa kluczowego nic wspólnego:
jest określany przez kompilator na podstawie przypisanej wartości. jego priorytet. Aby zmienić priorytet, można zastosować operatory, np.
r e t u rn nie jest wymagane; można go jednak użyć (bez żadnego M e to d a P a ra m e try ( " 3 " , " 4 " , 5 ) ;
Co za tym idzie, poniższy zapis spowodowałby błąd kompilacji: wyrażenie 4+2/2 jest równe 5, a wyrażenie (4 + 2) /2 jest równe 3.
argumentu), aby przerwać wykonywanie metody: M e to d a P a ra m e try ( " 3 " , " 4 " ) ;
v a r lic z b a = 3; M e to d a P a ra m e try ( " 3 " ) ;
v o id M e t o d a (in t a rg u m e n t)
lic z b a = " t e s t " ;
Instrukcje złożone i ( Argumenty nazwane i opcjonalne
Język C# udostępnia kilka rodzajów instrukcji złożonych. Instrukcja i n t l i c z b a = 2 * a rg u m e n t; W wywołaniach metod można jawnie podawać nazwy parametrów,
Stałe warunkowa pozwala uzależnić wykonanie pewnego ciągu instrukcji re tu rn ; dla których chcemy określić wartość, dzięki czemu nie trzeba pamiętać
Deklarowanie stałych odbywa się w ten sam sposób, co deklarowanie od danego warunku, np.: i n t l i c z b a 2 = 2 * l i c z b a ; //ostrzeżenie - kolejności argumentów:
i inicjalizowanie zmiennych, z wyjątkiem dodania słowa kluczowego i f ( warunek) instrukcja nie zostanie wykonana p u b l i c s t a t i c d o u b le P o t ę g a (d o u b le x ,
c o n s t na początku instrukcji: { } d o u b le y )
co n st in t lic z b a = 3; } e ls e (
Wartości stałej nie można zmieniać w trakcie działania programu.
Parametry metod r e t u r n . M a th .P o w (x , y ) ;
Zwykłe parametry metod są wymieniane w nawiasach
}
gdzie warunek]est tylko i wyłącznie typu b o o l! Przeciwnie niż okrągłych po przecinku w sygnaturze (nagłówku) metody.
Operatory np. w C + + nie jest możliwe wykonanie następującej operacji: Parametry metod mogą podlegać działaniu różnych modyfikatorów. C o n s o le . W r it e L i n e (M e to d y . P o t ę g a ( y : 2 ,
Za pomoq operatora można wykonywać operacje na wyrażeniach i n t 1i czba = 3; Dwa pierwsze modyfikatory działają w bardzo podobny sposób. x: 3 ));
(zmiennych bądź wartościach stałych). Operatory dzielimy na: i f ( l i c z b a = 5 ) I I BŁĄD Modyfikatory r e f i o u t pozwalają na przekazywanie parametrów C o n s o le . Wri t e L i n e (M e to d y . P o tę g a ( x : 2 ,
o arytmetyczne, W takiej sytuacji w nawiasie zostaje dokonane przypisanie i wyrażenie metod przez referencję. Dzięki temu jeśli wewnątrz metody y: 3 ));
» logiczne, przyjmuje wartość 5. W języku C # nie można jednak domyślnie wartość parametru ulegnie zmianie, argument przekazany do metody Warto zauważyć, że użycie argumentów nazwanych nie wymaga
o bitowe, skonwertować tej wartości na typ b o o l, stąd takie wyrażenie również zmieni wartość (normalnie do metody przekazywana jest żadnych ingerencji w deklaracjach metod.
o relacji, spowoduje błąd kompilatora kopia argumentu): Ciąg dalszy na str. 2
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Argumenty opcjonalne pozwalaj na pominięcie podawania pewnych // treść klasy Metody statyczne p u b l i c i n t Waga
{
argumentów w wywołaniu metody W takiej sytuacji wewnątrz 1 Metody statyczne mogą być wywoływane bezpośrednio przy użyciu
metody są używane ich wartości domyślne: c l a s s C z ło w ie k : S s a k get
klasy, a nie obiektów.
p u b l i c s t a t i c d o u b le O p c j o n a l n e j n t a , { {
d o u b le b = 5 .0 ) // treść klasy Przykład: r e t u r n w aga;
; { ) c l a s s C z ło w ie k }
re tu rn a * b; C # nie oferuje wielokrotnego dziedziczenia (znanego np. z C + +), { set
czyli dziedziczenia po wielu klasach jednocześnie. Niektóre klasy p u b l i c s t a t i c f l o a t o b lic z B M I {
}
(np. S tre a m ) są oznaczone jako abstrakcyjne; ( i n t w a ga , f l o a t w z r o s t ) waga * v a lu e ;
C o n s o le .W r it e L in e ( M e t o d y .O p c jo n a ln e ( 3 , a b s tra c t c la s s Ssak { }
//treść }
2 ) ) ; //wyświetla 6 {
C o n s o le .W ri t e L in e ( M e t o d y . } } ł
Oznacza to, ze nie jest możliwe utworzenie obiektu danej klasy } W sekcji g e t jest zwracana wartość; nie musi ona składać się
0 p c j o n a l n e ( 3 ) ) ; // wyświetla 15
Dopiero obiekty klas pochodnych mogą być tworzone (o ile te klasy // inne instrukcje jedynie z instrukcji r e t u r n ; można także dołączyć instrukcje
f l o a t BMI = C z ło w ie k . sprawdzające np. poprawność przechowywanych danych. Podobna
Modyfikatory dostępy nie zostaną oznaczone jako abstrakcyjne).
Klasa staje się abstrakcyjną również wtedy, gdy któraś z jej metod
o b i i c z B M I( 7 5 , 2 . O F ) ; sytuacja występuje w bloku s e t . Pojawia się w nim słowo kluczowe
Metody mają dostęp do zmiennych klasy i do siebie nawzajem. v a lu e . Przechowuje ono wartość, która została nadana właściwości
zostanie oznaczona jako abstrakcyjna: jednym z najpopularniejszych przykładów użycia metod statycznych
Kwestię dostępu innych klas do metod i pól określonej klasy regulują przez programistę. Gdybyśmy chcieli dodać warunek, który pozwoli
a b s tr a c t c la s s Ssak jest klasa S y s t e m .Math. Udostępnia ona szereg statycznych
modyfikatory dostępu. Są one umieszczane przed deklaracją pól na ustawienie jedynie wagi o wartości większej od zera, należałoby
{ metod służących do obliczania m.in. funkcji trygonometrycznych: skorzystać z następującej konstrukcji:
i metod: p u b l i c a b s t r a c t v o id r u s z a j
c l a s s C z ło w ie k d o u b le s in u s = M a t h . S i n ( 4 5 . 0 ) ; set
( i n t k ie r u n e k ) ; Również pola mogą być deklarowane jako statyczne. Jeśli klasa zawiera
{ (
} tylko pola i metody statyczne, może zostać oznaczona jako klasa statyczna: i f ( v a lu e > 0 )
p r iv a t e in t w z ro s t; W tej sytuacji w klasie pochodnej musi zostać zadeklarowana metoda
p u b l i c i n t M e to d a () s t a t ic c la s s S ta ty c z n a waga = v a lu e ;
r u s z a j():
( { )
c l a s s C z ło w ie k : S s a k p u b l i c s t a t i c v o id S t a t y c z n a M e to d a Q Właściwości są również często używane przy projektowaniu interfejsu
// treść metody
{ { } aplikacji (design-time), kiedy to dzięki nim można udostępnić niektóre
} p u b l i c o v e r r i d e v o id r u s z a j
p u b lic s t a t ic i n t S t a t y c z n e P o le = 3 ; pola klasy do edycji.
) ( i n t k ie r u n e k )
Mają one następujące znaczenie: j }
p u b l i c — element jest dostępny dla wszystkich klas.
( Właściwości
p r i v a t e — element jest dostępny tylko dla metod danej klasy
// treść metody Interfejsy implementowane automatycznie
} Chociaż C # nie obsługuje wielokrotnego dziedziczenia, podobną Począwszy od C # 3.0, istnieje możliwość stosowania skróconych
p r o t e c t e d — element jest dostępny dla metod danej klasy i klas
) funkcjonalność zapewniają interfejsy. Deklaracja interfejsu zawiera deklaracji właściwości. Są one stosowane w sytuacjach, gdy właściwość
po niej dziedziczących (rozdział „Dziedziczenie"). Nagłówki metod są identyczne; zamiast słowa a b s t r a c t deklaracje nagłówków metod oraz innych złożonych elementów, stanowi jedynie opakowanie dla prywatnego pola klasy, przez co
i n t e r n a l — element jest dostępny dla metod danej klasy pojawiło się słowo o v e r r i de. Oznacza ono, że dana metoda konstrukcjaakcesorów g e t i s e t jest trywialna. Można uniknąć
omówionych w dalszych podrozdziałach (delegacji, zdarzeń
i wszystkich elementów z tego samego podzespołu (ang assembly). przesłania metodę z klasy nadrzędnej. Istnieje możliwość przesłonięcia tworzenia nadmiarowego kodu, stosując właściwości implementowane
p r o t e c t e d i n t e r n a l — element jest dostępny dla metod i właściwości). Interfejs nie zawiera jednak treści metod — mają je
metody nawet wtedy, gdy metoda została zadeklarowana zapewnić klasy, które dany Interfejs będą implementować. Interfejs automatycznie:
danej klasy, klas po niej dziedziczących lub elementów z tego samego w klasie nadrzędnej. c l a s s C z ło w ie k
podzespołu. deklaruje się przy użyciu słowa kluczowego i n t e r f ace:
{
i n t e r f a c e S p a n ie
Przyldad: p u b l i c i n t Waga { g e t ; s e t ; }
Konstru który c la s s Ssak
{
v o id s p i j ( ) ;
1
{ W przypadku tej właściwości nie trzeba jawnie deklarować prywatnego
Klasa może posiadać specjalną metodę, wywoływaną w chwili 1
p u b l i c v i r t u a l v o id r u s z a j pola klasy, w którym wartość będzie przechowywana Nie trzeba
utworzenia obiektu. Metoda ta nazywana jest konstruktorem. c l a s s C z ło w ie k : S p a n ie także podawać elementarnych bloków g e t (z instrukcją return)
( i n t k ie r u n e k )
Konstruktor ma taką samą nazwę jak klasa i me zwraca { i s e t (z przypisaniem wartości v a l ue) Taka właściwość może być
żadnej wartości: {
// treść metody p u b l i c v o id r u s z a j ( i n t k ie r u n e k ) traktowana tak jak wszystkie Inne.
c l a s s C z ło w ie k { Jeśli chcesz utworzyć właściwość tylko do odczytu lub tylko do zapisu
}
{ } (tj. jeden z akcesorów ma być publiczny, a drugi prywatny), mozesz
)
p r iv a t e in t w z ro s t; v o id S p a n i e . s p i j ( ) skorzystać ze słowa kluczowego p r iv a t e :
c l a s s C z ło w ie k : S s a k
p u b l i c C z l o w i e k j n t p W zro st) ł c l a s s C z ło w ie k
ł
I p u b l i c o v e r r i d e v o id r u s z a j ) i
w z r o s t = p W zro st; p u b l i c i n t Waga { g e t ; p r i v a t e s e t ;
( i n t k ie r u n e k ) )
} Implementowanie Interfejsu określa się również za pomocą znaku }
}
} dwukropka. Jeśli klasa dziedziczy po innej klasie, a jednocześnie }
W konstruktorze najczęściej dokonuje się inicjalizacji zmiennych klasy Jak widać, nleabstrakcyjną metodę, która może być przesłaniana przez
(jak powyżej) i wykonuje się operacje konieczne do prawidłowego klasy pochodne, należy oznaczyć słowem kluczowym v i r t u a l .
implementuje jeden lub więcej interfejsów, jako pierwszą po dwukropku
należy podać nazwę klasy, a następnie po przecinkach nazwy interfejsów:
Indeksery
Istnieje możliwość zablokowania dziedziczenia klasy lub przesłaniania Niektóre obiekty, np. listy, istotę swo|ego działania opierają na dostępie
jej działania. Konstruktory z reguły są oznaczone słowem p u b lic , c l a s s C z ło w ie k : S s a k , S p a n ie do tablicy (bądź innej struktury danych) zawierającej elementy listy.
gdyż to właśnie za ich pomocą najczęściej są tworzone obiekty. Klasa metody w klasach pochodnych. Śluzy do tego celu słowo kluczowe Metody interfejsu nie posiadają modyfikatorów dostępu; łatwo Aby ułatwić dostęp do takiej kluczowej zmienne], można wykorzystać
może posiadać wiele konstruktorów, w tym konstruktor domyślny s e a le d . odróżnić je od metod klasy dzięki temu, że nazwa implementowanej indekser. Dzięki niemu można odwołać się do danego elementu klasy
(niepobierający żadnych argumentów). metody musi być poprzedzona nazwą interfejsu (np. v o id przy użyciu nawiasów kwadratowych, zastosowanych bezpośrednio
Przykład blokowania dziedziczenia:
S p a n ie .s p ijO ) . do nazwy obiektu:
Destruktory s e a le d c l a s s S s a k
L i s t a L i c z b l i s t a = new L i s t a L i c z b ( ) ;
Konstruktor jest wywoływany przy tworzeniu obiektu, natomiast
{ Struktury l i s t a [0 ] = 3 ;
} Struktura to konstrukcja bardzo podobna do klasy, Stosuje się ją
destruktor przy jego mszczeniu. Składnia destruktora jest następująca: Aby klasa mogła korzystać z indeksera, oprócz stosownej zmiennej
c l a s s C z ło w ie k : S s a k // błąd kompilatora ! głównie do przechowywania obiektów wymagających niewielkiej przechowującej dane należy zastosować konstrukcję indeksera, jak na
-nazwaKl asy() { Ilości danych i prostej funkcjonalności. Strukturami są np. struktura poniższym przykładzie:
( } S y s t e m . D raw i n g . P oi n t — przechowuje dane punktu
) o określonych współrzędnych; struktura S y ste m . D raw i n g . c la s s L is t a L ic z b
Destruktor me może przyjmować żadnych argumentów ani zwracać Przykład blokowania przesłaniania metody (dotyczy tylko {
C o lo r — przechowuje informaqe o kolorze. Strukturę deklaruje się
wartości. Nie może być też wywoływany przez programistę (obiekty metod, które są oznaczone słowem o v e r r i de): p r i v a t e i n t [] l i c z b y = new i n t [ 1 0 ] ;
przy użyciu słowa kluczowego s t r u c t :
są zwalniane automatycznie przy użyciu składnika CLR o nazwie p u b l i c i n t t h i s [ i n t in d e x ]
c la s s Ssak s tru c t S tru k tu ra
garbage collector). Klasa może zawierać tylko jeden destruktor; {
{ f
nie może on też być dziedziczony get
p u b l i c v i r t u a l v o id r u s z a j }
( i n t k ie r u n e k ) { } Najważniejsze różnice między strukturą a klasą to: í
Inicjacja pól i • Brak możliwości dziedziczenia struktur Struktury nie mogą być
re tu rn 1ic z b y [ in d e x ] ;
}
Istnieje możliwość nadania zmiennym klasy wartości już w trakcie jej c l a s s C z ło w ie k : Ssak odziedziczone ani dziedziczyć po innych strukturach lub klasach.
se t
deklarowania. { • Sposób przechowywania struktur w pamięci. Struktury są
f
p u b l i c s e a le d o v e r r i d e v o id przechowywane jako wartości, a nie (jak obiekty klas) jako l i c z b y [ i n d e x ] = v a lu e ;
Przykład: r u s z a j ( i n t k ie r u n e k ) { } referencje.
}
c l a s s C z ło w ie k } • Brak możliwości Inicjacji pól. Zmienne struktury nie mogą być
}
{ c l a s s S u p e r C z lo w ie k : C z ło w ie k inicjowane tak, jak zmienne klasy.
}
p r i v a t e i n t w z r o s t = 1 75 ; { • Brak destruktorów. // inne instrukcje
// dalszy ciąg klasy p u b l i c o v e r r i d e v o id r u s z a j L i s t a L i c z b l i c z b y = new L i s t a L i c z b ( ) ;
} ( i n t k ie r u n e k ) ( } // błąd kompilatora! Instrukcja foreach lic z b y [ 0 ] = 3;
Za pomocą Instrukcji f o r e a c h możliwe jest wykonanie operacji i n t zm ie n n a = l i c z b y [ 0 ] ;
} na wszystkich elementach danej kolekcji obiektów lub tablicy.
Dziedziczenie Jeśli do atrybutów klasy zostanie dodane słowo kluczowe p a r t i a l , Kompilator Interpretuje słowo t h i s jako oznaczenie Indeksera.
Przykład: Typ i n t przed słowem t h i s określa rodzaj zwracanego elementu,
Niektóre klasy mają wiele wspólnych cech. Wszystkie kontrolki jej deklaracja będzie mogła zna|dować się w kilku plikach. i n t [ ] l i c z b y = new i n t [] ( 0 , 1 , 2 ,
graficzne mają ustalony rozmiar, kolor czy punkt położenia. Wiąże Warto pamiętać, że każda klasa, nawet jeśli jawnie nie dziedziczy natomiast określenie i n t i ndex definiuje typ indeksu, według
3 , 4} którego będzie uzyskiwany dostęp do obiektu. Sama czynność
się to z posiadaniem przez nie pewnych wspólnych metod I pól. po jakiejś klasie, jest pochodną klasy Obj e c t . Jest to klasa bazowa fo re a c h ( in t i in lic z b y )
Zamiast deklarować te same metody i pola w każdej z klas, projektanci dla wszystkich klas; dzięki temu często wykorzystuje się ją jako uzyskiwania i zapisywania danych odbywa się jak w zwyczajnej
{ właściwości. Oczywiście powyższa klasa powinna zostać zaopatrzona
platformy NET wykorzystali mechanizm dziedziczenia i utworzyli parametr w różnego rodzaju metodach. // wykonaj operacje przy użyciu zmiennej i
|edną wspólną klasę dla kontrolek: C o n t r o l Wszystkie kontrolki w stosowne zabezpieczenia, np. uniemożliwiające odwołanie spoza
)
dziedziczą po mej, dzięki czemu uzyskują dostęp do je| metod, pól Tworzenie obiektów zakresu tablicy itp.
i Innych elementów posiadających modyfikatory dostępu p ubl i c, Każdy obiekt po zadeklarowaniu go, a przed jego utworzeniem ma Zmienna iteracyjna musi mieć taki sam typ jak element tablicy
p r o t e c t e d oraz p r o t e c t e d i n t e r n a l (jak również wartość n u 11. Jest to wartość specjalna; oznacza ona, ze obiekt nie lub kolekcji obiektów W przypadku obiektów wymagania Instrukcji Delegacje
i n t e r n a l , chociaż nie jest to regułą) został utworzony. f o r e a c h są bardziej zlozone. Obiekt dane| klasy bądź struktury We wszystkich powyższych przykładach parametrami metod mogły
Jeśli klasa B dziedziczy po klasie A, a jakaś metoda przyjmuje jako Obiekty, czyli egzemplarze danej klasy, są najczęściej tworzone być tylko zmienne przechowujące dane. C#, podobnie jak większość
musi udostępniać elementy G et Enu m e ra t o r, M oveNext,
argument obiekt klasy A, można również podać obiekt klasy B: przy użyciu konstruktora i słowa kluczowego new, np.: R e s e t i C u r r e n t , które są oferowane przez Interfejsy języków programowania, umożliwia też wykorzystanie w ten sposób
c la s s A c l a s s C z ło w ie k IE n u m e ra b le o ra z I En u m e ra to r. Każda klasa lub struktura, metod, jest to jedno z najpopularniejszych zastosowań mechanizmu
która implementuje te dwa Interfejsy, może być wykorzystana delegacji. Delegację deklaruje się podobnie jak metodę, dodając słowo
{ ł
p u b l i c C z l o w i e k ( S t r i n g p N a zw isk o ) w instrukcji f o r e a c h . kluczowe d e l eg a te:
}
c la s s B : A { p u b l i c d e le g a t e v o id
1 { n a z w is k o = p N a z w is k o ; Właściwości Wyswi e tlK o m u n i k a t ( S t r i ng v a l u e ) ;
} Chociaż zmienne klasy są zazwyczaj deklarowane jako prywatne, Od tego momentu można tworzyć obiekty delegacji, które odwołują
}
p u b l i c v o id m e to d a (A o b i e k t ) { } p r i v a t e S t r i n g n a z w is k o ; programiści często udostępniają je pośrednio przy użyciu właściwości, się do konkretnych metod. Metody te muszą mleć identyczny
B o b ie k t B = new B ( ) ; } Właściwość jest konstrukcją, za pomoq której można uzyskać nagłówek jak delegacja, np.
m etoda ( o b i e k t B ) ; // inne instrukcje dostęp do określonej cechy danej klasy. Najprostszym zastosowaniem p u b l i c v o id W y s w ie t lW O k ie n k u (S t r in g
Aby zadeklarować klasę dziedziczącą po innej, stosuje się następującą C z ło w ie k p ie r w s z y = new właściwości jest „opakowanie" zmiennej klasy: w a rto ść)
konstrukcję: C z lo w i e k ( „ K o w a l s k i " ) ; c l a s s C z ło w ie k {
c la s s Ssak Inną metodą, rzadziej wykorzystywaną, jest tworzenie obiektów f M e s s a g e B o x .S h o w (w a r t o s c );
: { przy użyciu metod statycznych. p r i v a t e i n t w aga; }

2
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Dysponując taką metodą, można utworzyć obiekt delegacji re tu rn "Ssak, "; Oto przykład: Oczywiście do metod anonimowych można przekazywać
i korzystać z niego (nazwę metody należy podać jako parametr } S t r in g ś c ie ż k a = " c t W s c ie z k a " ; argumenty. Kontynuując przykład, klasa T h re a d przyjmuje
konstruktora delegacji, niezależnie od parametrów w niej } C # akceptuje też zapisywanie łańcuchów w postaci literałów @. także delegację typu P a ra m e tr i z e d T h r e a d S t a r t
zadeklarowanych): c l a s s C z ło w ie k : S s a k Literały takie zapisuje się, zaczynając łańcuchy od znaku @, np.: o następującej treści: d e l e g a te v o id
W y św ie tl K o m u n ik a t d e l e g a c j a = new { S t r i n g in n y _ t e k s t = @ " ja k is t e k s t " ; P a r a m e t r iz e d T h r e a d S t a r t (O b je c t o b i e k t ) ;.
Wyswi e tlK o m u n i k a t(W y ś w ie tlW O k i e n k u ) ; p u b l i c C z l o w i e k ( S t r i n g im ię ) : Łańcuchy @nie są przetwarzane przez program, można więc
b a se () Oto p r z y ld a d :
d e le g a c ja (" t r e s c " ); zapisywać w nich znaki lewego ukośnika bez użycia podwójnego
T h re a d t = new T h r e a d (
Jak juz wspomniałem, z typu delegacp można korzystać jak z każdego { lewego ukośnika:
M e ssa g e B o x . S h o w ("tw o rzym y o b ie k t d e l e g a t e ( o b j e c t o) { C o n s o le .
innego typu, również wykorzystując go jako parametry dla metod: S t r i n g in n a S c i e z k a = @ " c : \ s c ie z k a \
c z lo w ie k a " ) ; W r ite L in e ( " N o w y w ą te k : " + o ) ; }
p u b l i c v o id p li k . t x t " ;
In n a M e to d a (W y sw ie tlK o m u n i k a t m etoda) t h i s . im ię = im ię ; Aby u ż y ć w t a k im ła ń c u c h u z n a k );
} t.S ta rt(" te s t" );
{ c u d z y s ło w u , n a le ż y z a p i s a ć go dwa
M e t o d a ( " je s z c z e in n y k o m u n ik a t " ); p u b lic bool Porów naj L u d z i( C z ło w ie k c) ra zy : Kompilator sam rozróżnia podane metody anonimowe; jest on
} ( S tr in g te k s t = " " k o le jn y t e k s t " w stanie dopasować zarówno metodę bezparametryczną (do delegacji
Delegacje są bardzo często wykorzystywane w mechanizmie zdarzeń. re tu rn ( c .T o S t r in g O - = t h is . " - t e k s t w c u d z y s ł o w ie " ; // wyświetla:
T o Stri n g( ) ) ; typu T h r e a d S t a r t ), jak i parametryczną (do delegacji typu
„ Kolejny tekst" - tekst w cudzysłowie P a r a m e tr i z e d T h r e a d S t a r t ).
Zdarzenia }
Mechanizm zdarzeń umożliwia reakcję programu na różne sytuacje,
p u b lic o v e r rid e S t r in g T o S t r in g O
{
Atrybuty Wyrażenia lambda
takie jak kliknięcie przycisku, zaznaczenie opcji czy wczytanie danych. Atrybuty pozwalają na dodawanie do klas, interfejsów, metod Wyrażenia lambda stanowią usprawnienie metod anonimowych,
re tu rn b a s e .T o S t r in g O +
Dzięki temu mechanizmowi w momencie zajścia takiego zdarzenia i innych elementów języka C # specjalnych informacji, stanowiących głównie pod względem zwięzłości i przejrzystości zapisu Odnosząc
" C z ło w ie k - 11 + t h i s . im ię ;
informowane są wszystkie obiekty, które uprzednio zadeklarowały swego rodzaju metadane. Atrybuty me wpływają bezpośrednio się do poprzedniego przykładu, efekt przepisania go w wersji
} bezparametrycznej przy użyciu wyrażeń lambda jest następujący:
chęć nasłuchiwania zdarzeń. p u b l i c b o o l T e s to w a ( ) na kod klasy, ale za to na jej działanie. Atrybuty są intensywnie
Aby dodać do danego zdarzenia metodę obsługi, wykorzystuje się wykorzystywane m.in. w WCF, gdzie niewielkie zmiany wprowadzane T h re a d t = new T h r e a d (
f () => C o n s o le .W r ite L in e (" N o w y w ą te k")
operator +=: re tu rn t h is .P o r o w n a jL u d z i( t h i s ) ; w wartościach atrybutów potrafią modyfikować działanie
p u b l i c v o id M e t o d a O b s lu g i( o b j e c t //zawsze zwróci true całych aplikacji! );
s e n d e r , E v e n t A r g s e) Od strony praktycznej atrybut jest klasą, która dziedziczy po klasie t.S ta r t();
i
p r iv a t e S t r in g im ię ; S y s t e m . A t t r i b u tę . Zgodnie z konwencją klasa atrybutu Tak naprawdę powyższy przypadek wyrażenia lambda jest niezwykle
(
// treść obsługi powinna kończyć się słowem A t t r i b u tę . Wykorzystując atrybut, specyficzny. Głównym zastosowaniem tego typu wyrażeń jest
należy podać jego nazwę w nawiasach kwadratowych przed wybranym wykonywanie operacji na podanych argumentach, co najczęściej wiąże
}
S y s t e m .W in d o w s .F o r m s .B u tt o n p r z y c i s k = Klasa S s a k przesłania metodę T o S t r i n g ( ) , która jest używana elementem. się ze zwracaniem wartości. W wyrażeniach lambda nie trzeba jednak
new S y s t e m .W in d o w s .F o r m s . B u t t o n ( ) ; przez wszystkie klasy do zwrócenia najważniejszych wartości i opisów Jednym z najbardziej znanych atrybutów jest S e r i a l i z a b l e. korzystać z instrukcji r e t u r n :
p r z y c i s k . C l i c k += new S y ste m . (jest zadeklarowana w klasie Obj e c t). W klasie C z l owi ek d e le g a t e d o u b le
Klasa oznaczona takim atrybutem może być serializowana, np. za
E v e n t H a n d le r (M e t o d a O b s lu g i) ; w kilku metodach odwołujemy się do obiektu samej klasy (choć F u n k c ja Je d n o w y m ia ro w a (d o u b le x ) ;
pomocą klasy B i n a r y F o r m a t te r lub S o a p F o r m a tte r :
Zdarzenie C l i c k przycisku przyjmuje domyślny typ zdarzeń, nie jest to wymagane). Wreszcie w metodzie T e sto w a () s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
[ S e r i a l i ż a b ie ]
czyli E v e n tH a n d l e r. Jest to delegacja, której nagłówek jest korzystamy ze słowa t h i s, aby przekazać aktualny obiekt. Jako c l a s s C z ło w ie k
taki, jak nagłówek M etod aO b sl u g i () Operator += oznacza, żewmetodzie P o ró w n a j L u d z i ( ) obiekt podany w parametrze F u n k c ja Je d n o w y m ia ro w a o d w ro tn o ść
{
ze do danego zdarzenia może być przypisanych wiele obiektów jest porównywany z aktualną referencją obiektu (ponownie = ( x ) => (x != 0 ? l / x : D o u b le .
p u b lic i n t Waga { g e t ; p r iv a t e s e t ; }
delegacji — wszystkie one będą informowane o danym zdarzeniu. słowo kluczowe t h i s), metoda T e sto w a ( ) zawsze zwraca P o s it iv e ln f in it y ) ;
} C o n s o le . W r it e L in e ( o d w r o t n o ś ć ( 3 ) ) ;
Aby móc dodać dowolną metodę obsługi zdarzenia, trzeba t r u e . Słowo kluczowe b a s e pojawia się w dwóch miejscach: Atrybuty, będące w istocie normalnymi klasami, mogą przyjmować
znać nazwę zdarzenia obiektu (np. C l i c k ) , nazwę delegacji w m e tod zieTo String()klasyCzlow iek(d ziękitem u C o n s o le .R e a d K e y O ;
różnego rodzaju parametry, Dobry przykład stanowi atrybut
(np. E v e n tH a n d l e r) i jej budowę oraz nazwę metody wywołanej wynik działania tej metody przyjmuje postać „Ssak, Człowiek — imię") A t t r i b u t e lls a g e , stosowany w deklaracjach klas atrybutów:
przez zdarzenie (M etodaO bsl u g i). oraz w konstruktorze (w tym przypadku stanowi odwołanie do W tym przypadku najpierw deklarujemy delegację typową
[ A t t r i b u t e lls a g e ( A t t r i b u t e T a r g e t s .
konstruktora klasy bazowe|). Musi ono być umieszczone przed dla jednowymiarowych (|ednoargumentowych) operacji
C la s s , A llo w M u lt ip le = f a ls e ) ]
Rzutowanie właściwym blokiem instrukcji. c l a s s W a z n o s c K la s y : A t t r i b u t e
arytmetycznych. Do tego typu delegacji przypisujemy
Jedną z najczęściej wykonywanych czynności jest konwersja między jednoargumentowe wyrażenie lambda, którego treścią jest proste
typami danych. Najłatwiej jest dokonać konwersji typów prymitywnych Wyjątki (
p u b l i c i n t W a rto ść { g e t ; se t; }
wyrażenie arytmetyczne — jeśli x jest różne od 0, możemy obliczyć
(np. liczbowych) na typ S t r i n g — wystarczy wywołać metodę C # oferuje obsługę wyjątków przy użyciu klauzuli t r y . . odwrotność podanej liczby, w przeciwnym razie zwracamy +oo.
T o S t r i n g O zadeklarowanąwklasieobject.acozatymidzie c a t c h . . f i n a l l y . Czynności, które mogą spowodować } Następnie możemy używać delegacji w klasyczny sposob — tak jakby
W tym przypadku pierwszy argument stanowi wartość typu była ona funkcją.
— dostępną we wszystkich klasach języka C# powstanie wyjątku (np. przerwanie połączenia sieciowego, błąd
wyliczeniowego A t t r ib u t e T a r g e t s .J e s t t o wartość, W powyższym przykładzie nie podaliśmy typów argumentów
Czasem zachodzi konieczność skonwertowania np. typu zapisu danych na dysku itp.) są ujmowane w blok instrukcji oznaczony
którą normalnie przekazuje się w konstruktorze klasy w wyrażeniu lambda, choć jest to oczywiście dopuszczalne:
zmiennoprzecinkowego na typ całkowitoliczbowy. W takiej sytuacji słowem kluczowym t r y . Następnie jest umieszczany blok c a t c h ,
A t t r i b u te U sa g e . Wartość C l a s s oznacza, ze atrybut F u n k c ja Je d n o w y m ia ro w a o d w ro tn o ść =
można wykorzystać operację rzutowania: w którym umieszcza się czynności informujące użytkownika o błędzie
można stosować tylko do klas. Następnie po określeniu tego jednego, (d o u b le x ) => (x != 0 ? l / x : D o u b le .
i n t zm ie n n a = ( i n t ) 4 . 5 ; (w zależności od rodzaju błędu, który jest identyfikowany na podstawie
wymaganego parametru możemy przekazywać parametry nazwane, P o s it iv e ln f in it y ) ;
Nie zawsze jednak można tego dokonać. Instrukcji rzutowania klasy wyjątku). Wreszcie w sekcji f i na 11 y, bez względu na to,
należy używać z rozwagą, głównie dla typów prymitywnych oraz dzięki którym można określić wartość właściwości tego atrybutu. Wyrażenia lambda są często wykorzystywane w połączeniu z językiem
czy wystąpił wyiątek, czy nie, zwalniane są wykonywane instrukcje
zdefiniowanych przez programistę. Do konwersji obiektów klas, W tym przypadku określamy właściwość A 1 1 owMu 11 i p 1 e, LINQ i API kolekcji (przestrzeń nazw S y s t e m . Co l 1 e c t i o n s .
konieczne do poprawnego działania programu (np zamykanie
struktur i interfejsów zalecane jest użycie operatorów a s i i s. zabraniając używania tego atrybutu do innych klas wielokrotnie. G e n e r i c), dlatego więcej przykładów znajduje się w sekcji
otwartych strumieni).
Operator i s przyjmuje dwa argumenty — po lewej stronie obiekt, Aby zastosować nowy atrybut wobec starej klasy, należy zastosować poświęconej tym zagadnieniom.
po prawe| nazwę klasy, np.: Przykład; następujący zapis:
S y s t e m .W in d o w s .F o r m s .B u tt o n p r z y c i s k = F ile S t r e a m s t r = n u li; [ S e r ia liz a b le ] Metody rozszerzające
new S y s t e m .W in d o w s .F o r m s .B u t t o n ( ) ; try [ W a g a K la s y (W a r to s c = 5 )] Metody rozszerzające pozwalają na dodawanie (rozszerzanie)
i f ( p r z y c i s k i s C o n t r o l) c l a s s C z ło w ie k funkcjonalności już istniejących klas bez konieczności ingerencji
s t r = F ile .0 p e n R e a d (@ " i w ich deklaracje tudzież tworzenie klas dziedziczących. Bardzo
{
// blok instrukcji wykona się
c :\ n ie is t n ie ja c y P lik .t x t " ); u b l i c i n t Waga { g e t ; p r i v a t e s e t ; ) dobry przykład stanowi klasa S t r i ng — jest to klasa zamknięta
} (s e a l ed), dlatego tez nie można utworzyć klasy pochodnej,
}
c a t c h ( F ile N o t F o u n d E x c e p t io n e x ) a jednocześnie klasie S t r i n g brakuje kilku przydatnych operacji,
Wyrażenie z użyciem operatora i s zwróci tru e , jeśli obiekt nie ma
wartości n u l i i jest możliwa konwersja danego obiektu na obiekt { Funkcje anonimowe z których jedną jest możliwość odwrócenia łańcucha. Nic nie stoi
M e s s a g e B o x .S h o w (" B ra k p l i k u ; Funkcje anonimowe w C # występują pod dwiema postaciami: metod na przeszkodzie, aby utworzyć metodę rozszerzającą:
danej klasy bez wygenerowania wyjątku.
" + e x . F i le N a m e ); anonimowych i wyrażeń lambda. Funkcje anonimowe pozwalają na c l a s s P ro gra m
Operator a s przeprowadza rzutowanie lewego argumentu na obiekt
} wygodne i zwięzłe deklaracje funkcji, z możliwością jednoczesnego
klasy określonej prawym argumentem i zwraca ten obiekt lub wartość {
f in a lly wykorzystania ich w kodzie (nie trzeba rozróżniać deklaracji od użycia s t a t ic v o id M a i n ( s t r i n g [ ] a rgs)
n u 11, jeśli operacja nie jest możliwa.
I — stąd nazwa wyrażenia). Wyrażenia lambda są znacznie krótsze,
S y ste m .W in d o w s. F o rm s. C o n t r o l p r z y c i s k i f ( s t r != n u l l )
= new S y s t e m .W in d o w s .F o r m s .B u t t o n ( ) ; niemniej można z nich korzystać, począwszy od NET 3.5 (C# 3.0), C o n s o le . W r i t e L i n e ( " a b e d " .
s t r .C lo s e (); podczas gdy z metod anonimowych można korzystać również
S y s t e m .W in d o w s .F o r m s .B u tt o n nowy = R e v e rs e ());
p r z y c i s k a s S y s t e m .W in d o w s .F o rm s. w NET 2.0 (C# 2.0). C o n s o le .R e a d K e y O ;
B u tto n ;
Klasa Array Metody anonimowe
Metoda anonimowa pozwala na stworzenie wewnętrznej deklaracji
Typ wyliczeniowy Każda tablica jest także obiektem. Jednocześnie wszystkie
tablice dziedziczą po klasie A r r a y . Dzięki temu można metody, bez konieczności podawania jej nazwy, w miejscu, w którym
s t a t i c c l a s s M etody
Zmienna typu wyliczeniowego zawiera zbiór stałych określonych {
wywoływać szereg metod i właściwości udostępnianych przez tę normalnie należałoby podać wartość typu delegacyjnego. Rozważmy
nazwami i wartościami, Typ wyliczeniowy jest deklarowany z użyciem p u b lic s t a t i c S t r in g R e v e r s e (t h is
klasę. Oprócz tego klasa A r r a y upubliczma metody statyczne, przykład kodu tworzącego najprostszy wątek:
słowa kluczowego enum (wewnątrz klasy, ale nie w metodzie!): S t r i n g ła ń c u c h )
zapewniające dodatkową funkcjonalność. Poniżej znajduje się opis s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
enum M ie s ią c e { S t y , L u t , M a r , K w i , M a j , i
niektórych z nich: c h a r [ ] z n a k i = 1 a n c u c h .T o C h a r A r r a y O ;
C z e ,L ip ,S ie ,W r z ,P a z ,L is ,G r u ) T h re a d z w y k ły = new T h re a d (n e w
M ie s ią c e m ie ś = M i e s i ą c e . S t y ; Metody klasy Array T h re a d S ta rt(M e to d a ));
i n t o s t a t n i = z n a k i . L e n g t h - 1;
Dodatkowo można dokonać konwersji typu wyliczeniowego na i n t G e t L e n g t h ( ) — zwraca liczbę elementów tablicy, f o r ( in t i = 0 ; i < z n a k i.L e n g t h
z w y k ły .S t a r t ( ) ;
całkowitoliczbowy. Domyślnie pierwszy element zbioru ma wartość v o id C o p y T o ( A r r a y t a b l i c a , i n t in d e x ) — / 2 ; 1++)
0, a każdy koleiny jest o 1 większy od poprzednika. W momencie kopiuje całą zawartość swojej tablicy do zmiennej ta b l i ca; pierwszy {
s t a t i c v o id M e to d a ()
wypełniony element zmiennej t a b l i ca będzie miał indeks i ndex. c h a r ch = z n a k i [ o s t a t n i - i ] ;
deklaracji można nadać kolejnym elementom zbioru wartości, np.: ( znaki [o s ta tn i - i] = znaki [ i ] ;
enum M ie s ią c e { S t y = 5 ,L u t ,M a r ,K w i,M a j, Metody klasy Array (statyczne) C o n s o l e .W r ite L in e ( " N o w y w ą t e k " ) ;
z n a k i[ i] = ch;
C z e ,L ip ,S ie ,W r z ,P a z ,L is ,G r u ) v o id C o p y (A r r a y z r o d l o , A r r a y c e l , i n t }
W ten sposób elementy zbioru będą miały wartości od 5 do 16. Klasa T h re a d wymaga przekazania parametru będącego delegacją }
i 1 o s c ) — kopiuje i lo s e elementów od początku tablicy r e t u r n new s t r i n g ( z n a k i ) ;
z r o d l o do tablicy c e l (wklejanie odbywa się również od początku), typu T h r e a d S t a r t — jest to delegacja bezparametryczna,
Słowa kluczowe this i base v o id R e v e r s e ( A r r a y t a b l i c a ) — odwraca kolejność niezwracająca żadnej wartości. W związku z tym konieczne było }
Słowo kluczowe t h i s jest używane w obrębie danej klasy, jeśli utworzenie tradycyjnej deklaracji metody, nawet jeśli nie pojawi się }
elementów tablicy. Warto zauważyć, że deklaracja metody rozszerzającej musi spełnić
istnieje konieczność odniesienia się do jej własnych metod, pól i innych v o id S o r t ( A r r a y t a b l i c a ) — sortuje tablicę ona w żadnym innym miejscu kodu. Konstrukcję tę można uprościć,
dwa warunki: po pierwsze, metoda musi być umieszczona w klasie
elementów. Użycie słowa t h i s, np. jako parametru dla metody, (elementy tablicy muszą być typu, który implementuje interfejs stosując metodę anonimową:
statycznej (sama metoda też musi być statyczna), a po drugie, klasa
powodu|e przekazanie całego obiektu tej klasy. ¡C o m p a ra b le ). s t a t i c v o id M a i n ( s t r i n g [ ] a r g s )
nie może być zagnieżdżona. W tym momencie można przekształcić
Słowo kluczowe b a se pozwala na odwołanie się w klasie potomnej {
do metod i właściwości klasy bazowej. Klasa String T h r e a d t = new T h r e a d ( d e l e g a t e ( )
dowolną metodę w metodę rozszerzającą.
Do przechowywania łańcuchów znaków służy w języku C# klasa W tym celu należy na liście parametrów metody umieścić
{ C o n s o le .W r it e L in e ( „ N o w y w ą t e k " ) ;
S t r i ng. Jest ona klasą dość wyjątkową, aby utworzyć nowy łańcuch (jako pierwszy) parametr postaci:
Przykład użycia obydwu słów kluczowych: } );
znaków, nie trzeba korzystać z konstruktora — wystarczy po prostu t h i s Ń azw aTypu n azw a P a ra m e tru
a b s tr a c t c la s s Ssak t.S ta rt();
przypisać wartość zmiennej: gdzie Nazwa Typu określa typ, do którego chcemy dodać
{ }
p u b lic S s a k ( ) S t r i n g ła ń c u c h = " t e k s t " ; W tym momencie zamiast instrukcji tworzącej nowy obiekt delegacji metodę rozszerzającą (nazwa Parametru może być dowolna).
Tekst musi być ujęty w cudzysłowy. Jeśli istnieje konieczność typu T h r e a d S t a r t tworzymy deklarację metody anonimowej. Ten parametr stanowi bezpośrednie (i jedyne) powiązanie utworzonej
{
M e s s a g e B o x .S h o w (" T w o r z e n ie zawarcia w tekście znaku cudzysłowu bądź innych znaków specjalnych Rozpoczyna się ona od słowa kluczowego d e le g a t e , po którym metody z typem oryginalnym. Należy zwrócić uwagę, że mimo
o b ie k t u s s a k a " ) ; (znaki końca wiersza, nowej linii, tabulacji), używa się do tego celu następuje wykaz parametrów metody (w tym przypadku brak), istnienia parametru w deklaracji metody nie podaje się go przy
) znaku \ (lewy ukośnik) w połączeniu z innym znakiem. Do zapisania a następnie jej treść. Nie określa się typu zwracanej wartości — jeśli wywołaniu. Można powiedzieć, że wywołanie metody za pomocą
p u b lic o v e r rid e s t r in g T o S t r in g O lewego ukośnika w łańcuchu wykorzystuje się podwójny lewy metoda ma zwrócić wartość, należy po prostu zastosować instrukcję konkretnego obiektu powoduje automatyczne „przekazanie" go
ukośnik (\\). r e t u r n w treści metody. w ramach pierwszego parametru metody.

3
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Klasa Enumerable Do testów wykorzystujemy tablicę obiektów o dynamicznie
tworzonych właściwościach. Dzięki temu me musimy myśleć
KOMPONENTY GRAFICZNE
Klasa Enum erabl e wykorzystuje mechanizm metod
0 deklaracji klasy dla takich danych. Następnie w zapytaniu LINQ
rozszerzających w celu udostępnienia bogatego zbioru funkcji dla
Idas kolekcji. Dzięki tej klasie wszystkie kolekcje, które implementują
wykonujemy klasyczną operację na danych — projekcję, czyli wybór
W poniższym zestawieniu znajdują się najważniejsze właściwości
i metody wybranych komponentów wizualnych dostępnych
Button
Przycisk najczęściej wykorzystywany do zatwierdzenia wykonywanych
niektórych właściwości obiektów z kolekcji. na platformie .NET. Dziedziczą one po klasie C o n t r o l, dlatego
interfejs IE n u m e ra b l e, mogą korzystać z wymienionych wcześniej operacji.
v a r t a b l i c a = new [ ] { new { Im ię = na początku najlepiej jest omówić elementy tej klasy — jako
poniżej metod (i wielu innych). Opisane metody są bardzo
często wykorzystywane również w języku LINQ, który jest
" J a n " , N a z w isk o = " K o w a l s k i " ) , new { klasy bazowej. Właściwości klasy Button
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" S y ste m .W i n do w s. F o rm s.
przedstawiony w kolejnej sekqi. Warto zwrócić uwagę, że mimo
dość skomplikowanych sygnatur stosowanie rozważanych metod jest }};
v a r ja n o w ie = fro m p i n t a b l i c a
Właściwości klasy Control F Ia t B u t t o n A p p e a r a n c e F I a tA p p e a r a n c e
znacznie prostsze. — precyzuje wygląd i zachowanie przycisku, jeśli właściwość
w h e re p . I m i e == „ J a n " b oo l A l 1 owD ro p — określa, czy kontrolka może wykonywać
b oo l A l 1 ( < T S o u r c e > ( t h i s F I a t Ś t y l e ma wartość F I a t.
s e l e c t p; operacje drag-and-drop ( t r u e — może, f a l se — nie może).
IE n u m e r a b le < T S o u rc e > s o u r c e , S y ste m .W i n do w s. F o rm s. F I a t S t y l e F I a t S t y l e
Powyższe zapytanie pozwala na wybór tylko obiektów spełniających S y s t e m . D raw i n g . C o lo r B a c k C o l o r — określa kolor
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — zwraca — określa sposób, w jaki jest rysowany przycisk (domyślnie
określone kryterium. Proszę zwrócić uwagę, że klauzula w here jest tla kontrolki, najczęściej wypełniającego dużą jej część (tlo przycisku,
t r u e , jeśli wszystkie elementy kolekcji spełniają podany warunek S ta n d a rd ).
umieszczona przed klauzulą s e l e c t — nie jest to przypadek. etykiety).
(predykat — funkcję logiczną), S y s t e m .W in d o w s .F o r m s .Im age Im age —
v a r t a b l i c a = new [] { new { Im ię = S y s t e m .D r a w i n g . R e c t a n g le C l i e n t R e c t a n g le
b oo l A n y < T S o u r c e > ( t h is określa obrazek, który jest wyświetlany na przycisku (właściwość
" J a n " , N a z w isk o = " K o w a l s k i " } , new { ! — zwraca rozmiar kontrolki bez dodatkowych, a koniecznych
IE n u m e r a b le < T S o u rc e > s o u r c e , F I a t S t y l e nie może mieć wartości System ).
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" elementów, takich jak paski przewijania, paski menu, ramki itd.
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — zwraca S t r i ng T e x t (odziedziczona z klasy C o n t r o l) — określa
)); b oo l C o n t a i n s Fo c u s — określa, czy dany komponent
t r u e , jeśli którykolwiek z elementów kolekcji spełnia podany tekst wyświetlany na przycisku.
v a r p ie r w s z y = (fro m p i n t a b l i c a (bądź któreś z jego komponentów-dzieci) jest aktywny (fokusowany;
warunek (predykat — funkcję logiczną), s e le c t p ) . T a k e ( l) ; t r u e — tak, f a l se — nie). Metody klasy Button
d o u b le A v e r a g e ( t h i s IE n u m e r a b le < d o u b le > Wyniki zapytania mogą być traktowane jako obiekt interfejsu S y s t e m . Wi n d o w s. F o r m s . C o n te x t M e n u S tr i p v o i d P e rfo rm C l i c k () — generuje zdarzenie C l i c k
so u r c e ) — oblicza średnią arytmetyczną elementów kolekcji typu 1 Enu m erab l e, dzięki czemu nie ma problemu, aby wywołać C o n te x t M e n u S tr i p — określa menu kontekstowe, przypisane dla danego przycisku.
d o u b l e. Istnieją też wersje przeciążone dla typów i n t, i n t6 4, bezpośrednio jego metody. W powyższy sposób możemy pobrać do danej kontrolki. Zwraca n u l i , jeśli nie zostało dodane żadne
f 1 o a t, d ę c i m a i, a talie ich odmian nullowalnych. określoną liczbę początkowych elementów kolekcji, a dodając metodę menu. Zdarzenia klasy Button
IE n u m e r a b le < T S o u rc e > S k i p ( ) , możemy w bardzo łatwy sposób zasymulować mechanizm S y s t e m .W in d o w s .F o r m s .C o n t r o l[] C o n t r o ls e v e n t E v e n t H a n d le r D o u b l e c l i c k — zachodzi,
C o n c a t < T S o u r c e > ( t h is stronicowania: — określa listę kontrolek, które należą do danej kontrolki (kontrolek- gdy użytkownik kliknie dwukrotnie przycisk,
IE n u m e r a b le < T S o u rc e > f i r s t , v a r t a b l i c a = new [ ] { new { Im ię = dzieci).
IE n u m e ra b l e < T S o u rc e > se c o n d ) — łączy dwie " J a n " , N a z w isk o = " K o w a l s k i " ) , new { S yste m .W i n d o w s. F o r m s . D o c k S t y l e D ock — CheckBox
kolekcje w jedną. Im ię = " A n d r z e j " , N a z w isk o = "Nowak" określa sposób wypełniania komponentu-rodzica (np. formatki) Pole do zaznaczenia, zawierające opis tekstowy W jednej grupie
IE n u m e r a b le < T S o u rc e > przez kontrolkę. Domyślnie brak wypełnienia (rozmiar zgodny komponentów C h e c k B o x może być zaznaczonych więcej pól
));
D is t i n c t < T S o u r c e > ( t h i s v a r d r u g i = (fro m p i n t a b l i c a z właściwością S i z e kontrolki), niż jedno.
IE n u m e r a b le < T S o u rc e > s o u r c e ,
I E q u a l i ty C o m p a r e r < T S o u r c e > c o m p a re r)
s e le c t p ) . S k ip ( l ) . T a k e ( l ) ; b oo l E n a b le d — określa, czy użytkownik jest w stanie Właściwości klasy CheckBox
Sortowanie wyników jest możliwe za pomocą operatora orderby: korzystać z kontrolki (t ru e — tak, f a l s e — nie). Wyłączenie S y s t e m . Wi n do w s. Form s .A p p e a ra n c e — określa
— zwraca kolekcję, która zawiera elementy z oryginalnej kolekcji v a r t a b l i c a = new [] { new { Im ię = kontrolki nie jest równoważne z jej zniknięciem z formatki
z pominięciem duplikatów. Do porównywania elementów jest wygląd pola.
" J a n " , N a z w is k o = " K o w a l s k i " ) , new { b oo l In v o k e R e q u i re d — określa, czy inne wątki muszą b oo l A u to C h e c k — określa, czy pole automatycznie zmienia
wykorzystywany obiekt co m pa re r. Im ię = " A n d r z e j " , N a z w isk o = "Nowak" używać metody I nvo ke ( ) , aby móc w swoim działaniu korzystać stan zaznaczenia przy kliknięciu (t r u e — tak, f a l se — nie).
T S o u rce F i r s t O r D e fa u lt < T S o u r c e > (t h is z komponentu (t r u e — muszą, f a l s e — nie).
)); S y ste m .W i n do w s. F o rm s. C h e c k S t a t e
IE n u m e ra b l e < T S o u rc e > s o u r c e ) — zwraca pierwszy
v a r p o so rto w a n e = fro m p i n t a b l i c a S y s t e m . D raw i n g . P o i n t L o c a t io n — określa C h e c k S t a t e — zwraca stan, w jakim znajduje się pole.
element podanej kolekcji lub element domyślny (domyślna wartość
o r d e r b y p .Im ie umiejscowienie komponentu w odniesieniu do komponentu-rodzica. b oo l C h e cke d — zwraca stan, w jakim znajduje się pole
dla typów prymitywnych lub n ul 1 dla typów referencyinych),
d e s c e n d in g s e l e c t p ; S y ste m .W i n do w s. F o rm s . P a d d in g M a rgi n — ( t ru e , jeśli właściwość C h e c k S t a t e ma wartość C h e cke d
jeśli kolekcja jest pusta.
W ten sposób obiekty zostaną posortowane malejąco po imieniu. określa margines kontrolki — odstęp między nią a jej komponentem- lub In d e t e r m i n a te , f a l se jeśli U nchecked),
IO r d e re d E n u m e r a b le < T S o u r c e >
Przy okazji warto skorzystać z mechanizmu, który pozwala na nieco rodzicem. b oo l T h r e e S t a t e — określa, czy pole może przybierać trzy
O rd e rB y < T S o u rce , T K e y > (t h is
większą elastyczność niż w przypadku sztywnych klauzul języka LINQ. S yste m .W i n do w s. F o rm s . P a d d in g P a d d i ng — stany zaznaczenia (t r u e — tak, f a l se — nie). Nawet jeślita
IE n u m e r a b le < T S o u rc e > s o u r c e ,
Klauzule te bezpośrednio wykorzystują metody API kolekcji, które określa odstęp między granicami kontrolki a jej treścią (np. opisem właściwość ma wartość f a l se, pole może przybrać początkową
F u n c < T S o u r c e , T K e y > k e y S e l e c t o r ) — zwraca
można wywoływać samemu. Przepisanie powyższego przykładu przycisku). wartość In d e t e r m i n a te (niedostępną w trybie dwustanowym).
posortowaną kolekcję. Do sortowania są używane elementy typu
nieco zmieni efekt: S y s t e m . Wi n do w s. Form s . S i z e S i z e — określa
TKey. Elementy te są wybierane z obiektów kolekcji za pomocą
v a r t a b l i c a = new [] { new { Im ię = rozmiar kontrolki. Zdarzenia klasy CheckBox
funkcji k e y S e le c t o r . e v e n t E v e n t H a n d le r C h e cke d C h an ge d — zachodzi,
" J a n " , N a z w isk o = " K o w a l s k i " ) , new { S t r i ng T e x t — określa tekst, wyświetlany przez dany
IE n u m e r a b le < in t > R a n g e ( in t s t a r t , i n t n) gdy zmienia się wartość właściwości Ch ecked ,
Im ię = " A n d r z e j " , N a z w isk o = "Nowak" komponent (sposób wyświetlania zalety od komponentu),
— zwykła, statyczna metoda klasy Enum erabl e, która zwraca e v e n t E v e n t H a n d le r C h e c k S ta te C h a n g e d —
)); b oo l V i s i b l e — określa, czy komponent jest widoczny
kolekcję n liczb całkowitych od liczby s t a r t . zachodzi, gdy zmienia się wartość właściwości C h e c k S t a t e
v a r p o so rto w a n e = (fr o m p i n t a b l i c a (t r u e — tak, f a l se — nie).
IE n u m e r a b le < T S o u rc e > (także w momencie zmiany z wartości In d e t e r m i n a te na
s e le c t p ).
R e v e r s e < T S o u r c e > ( t h is
IE n u m e r a b le < T S o u rc e > s o u r c e ) — zwracakolekcję O r d e r B y D e s c e n d in g Metody klasy Contro! C h e c k e d — wtedy nie zachodzi zdarzenie CheckedChanged).
(x => x . I m ię ) ;
o odwróconej kolejności elementów w porównaniu do kolekcji
oryginalnej. W ten sposób można uzyskać identyczny efekt, co w poprzednim
S y s t e m .D r a w i n g .G r a p h i c s C r e a te G r a p h i c s () ComboBox
— tworzy obiekt klasy G ra p h i c s , dzięki któremu można Komponent łączący listę elementów i pole tekstowe.
IE n u m e r a b le < T R e s u lt > S e le c t < T S o u r c e , przykładzie, otrzymując pełnię możliwości wyrażeń lambda. Ponadto
wykonywać operacje graficzne na kontrolce.
T R e s u l t > ( t h i s IE n u m e r a b le < T S o u rc e > stosowanie łańcucha wywołań pokazuje kolejność wykonywanych
v o id D o D ra g D ro p O — rozpoczyna operację drag-and-drop. Właściwości klasy ComboBox
s o u r c e , F u n c < T S o u r c e , T R e s u lt > s e l e c t o r ) operacji. S yste m .W i n d o w s. F o rm s. A utoCom pl eteM ode
S y s t e m .W in d o w s .F o r m s .Form F in d F o r m ( ) —
— zwraca projekcję podanej kolekcji zgodnie z określonymi Nic nie stoi na przeszkodzie, aby projekcja (operacja s e l e c t ) AutoCom pl eteM ode — określa sposób uzupełniania tekstu
zwraca obiekt formatki, na której znajduje się kontrolka.
warunkami, tj. wybiera określony fragment każdego elementu (typu powodowała pobranie nie całych obiektów (tudzież ich pojedynczych wpisywanego w pole tekstowe.
S yste m .W i n do w s. F o rm s . C o n t r o l
T R e s u l t) i wstawia go do wynikowej kolekcji. właściwości), ale zupełnie nowych obiektów: S y s t e m . Wi n do w s. F o rm s. DrawMode DrawMode —
G e t C h i1d A tP o i n t (S y s t e m .D r a w i n g . P o i n t p)
IE n u m e r a b le < T S o u rc e > S k i p < T S o u r c e > ( t h i s v a r t a b l i c a = new [] { new { Im ię = określa sposób rysowania elementów rozwijanej listy.
— zwraca kontrolkę-dziecko znajdującą się w podanym punkcie,
IE n u m e r a b le < T S o u rc e > s o u r c e , i n t n) — " J a n " , N a z w isk o = " K o w a l s k i " ) , new { S y ste m .W i n do w s. F o rm s. C o m b o B o x S ty le
v o id R e f r e s h ( ) — odrysowuje kontrolkę na ekranie,
zwraca wszystkie elementy kolekcji oryginalnej, począwszy od tego Im ię = " A n d r z e j " , N a z w isk o = "Nowak" D ro p D o w n S ty l e — określa styl wyświetlania rozwijanej listy
v o id S e l e c t ( ) — uaktywnia kontrolkę.
o indeksie n. }}; (m.in. czy użytkownik może wprowadzić tekst do pola tekstowego).
v a r nowy = (fr o m p i n t a b l i c a
IE n u m e r a b le < T S o u rc e > T a k e < T S o u r c e > ( t h is
IE n u m e r a b le < T S o u rc e > s o u r c e , i n t n) — s e l e c t new { P se ud on im Zdarzenia klasy Contro! S yste m .W i n d o w s. F o rm s. O b j e c t C o l1e c t i on
Ite m s — określa elementy rozwijanej listy,
zwraca n elementów kolekcji, począwszy od pierwszego ze źródłowej = p .N a z w is k o + p .Im ie ) ) ; e v e n t E v e n t H a n d le r C l i c k — zachodzi w momencie i n t S e le c t e d ln d e x — określa numer zaznaczonego
kolekcp. Często wykorzystywana w połączeniu z metodą S k i p ( ) . W ten sposób uzyskuje się obiekt nowego, nieokreślonego typu, który kliknięcia myszą obszaru kontrolki. elementu z listy.
IE n u m e r a b le < T S o u rc e > W h e r e < T S o u r c e > ( t h is zawiera jedną właściwość — P seud on im , powstałą na skutek e v e n t D r a g E v e n tH a n d le r D ra gD ro p — zachodzi, O b je c t S e le c t e d lt e m — zwraca bądź ustawia zaznaczony
IE n u m e r a b le < T S o u rc e > s o u r c e , konkatenacji dwóch właściwości z oryginalnego elementu. gdy operacja drag-and-drop zostaje zakończona. element z rozwijanej listy (należący do właściwości I tems).
F u n c < T S o u r c e , b o o l> p r e d i c a t e ) — tworzy Nieco bardziej skomplikowaną operację stanowi grupowanie. e v e n t D ra g E v e n tH a n d l e r D ra g E n t e r — zachodzi, S t r i ng S e l e c t e d T e x t — zwraca bądź ustawia tekst
kolekcję złożoną z elementów oryginalnej kolekcp, dla których funkcja Grupowanie pozwala na podział oryginalnej kolekcji na pewną liczbę gdy kursor w trakcie operacji drag-and-drop znajdzie się w obszarze znajdujący się w polu tekstowym.
logiczna (predykat) zwraca wartość t rue. zbiorów, w których pewna cecha ma identyczną wartość: kontrolki.
v a r t a b l i c a = new [ ] { new { Im ię = e v e n t E v e n t H a n d le r D ra g L e a v e — zachodzi, Metody klasy ComboBox
i n t F i n d S t r i n g ( S t r i n g s ) — zwracaindeks
LINQ " J a n " , N a z w isk o = " K o w a l s k i " ) , new {
Im ię = " A n d r z e j" , N a z w isk o = "Nowak"
gdy kursor w trakcie operacji drag-and-drop opuszcza kontrolkę,
e v e n t D ra g E v e n tH a n d l e r D r a g O v e r — zachodzi pierwszego elementu rozwijanej listy, który zawiera łańcuch s
LINQ to specjalny składnik platformy NET, który umożliwia w trakcie przesuwania kursora w czasie operacji drag-and-drop (od początku elementu).
} , new { Im ię = 'J a n " , N a z w isk o =
tworzenie skomplikowanych zapytań umożliwiających wyrafinowany nad kontrolką.
dostęp do danych bezpośrednio w kodzie języka C# (i innych języków
"Nowak" } } ;
e v e n t E v e n t H a n d le r E n t e r — zachodzi w momencie
Zdarzenia klasy ComboBox
v a r z gru p o w a n e = (fr o m p i n t a b l i c a e v e n t D ra w Ite m E v e n t H a n d le r D ra w lte m —
dostępnych na platformie NET). Zapytania te przypominają nieco g ro u p p b y p .N a z w is k o aktywacji kontrolki.
zachodzi, gdy odrysowywana |est rozwijana lista, jeśli właściwość
język SQL, ale mogą być stosowane wobec różnych źródeł danych i n t o g s e l e c t new e v e n t G iv e F e e d b a c k E v e n t H a n d le r
DrawMode jest ustawiona na wartość inną niż N o rm a l.
(zwykłych kolekcji, dokumentów XML, ale również baz danych) itd. { N a z w isk o = g .K e y , G iv e F e e d b a c k — zachodzi w trakcie operacji drag-and-drop.
e v e n t E v e n t H a n d le r DropDown — zachodzi
Dużą rolę odgrywają też metody opisane w poprzedniej sekcji, które O so b y = g } ) ; e v e n t K e y E v e n t H a n d le r Key Down — zachodzi
w momencie rozwijania listy.
w praktyce gwarantują funkcjonalność podobną do języka SQL. Efektem operacji grupowania jest obiekt g, Obiekt ten reprezentuje w momencie naciśnięcia klawisza,
e v e n t E v e n t H a n d le r D ro p D o w n C lo se d — zachodzi
Najprostsze zapytanie LINQ składa się z kilku części: pojedynczą grupę (zbiór elementów z oryginalnej kolekcji o tej same| e v e n t K e y P r e s s E v e n t H a n d le r K e y P r e s s —
w momencie zwijania listy,
i n t [ ] t a b l i c a = new i n t [] { 3 , 4 , 5 } ; wartości pewnej cechy— w tym przypadku nazwiska). Korzystając zachodzi, gdy jest naciśnięty klawisz znakowy, tj. nieposiadający
e v e n t M e a s u r e lt e m E v e n tH a n d le r
v a r t e k s t y = fro m p i n t a b l i c a z właściwości Key, możemy ustalić to nazwisko, zaś sam obiekt specjalnego znaczenia (jak np. Enter, spacja, TAB),
M e a su re lte m — zachodzi przed odrysowywaniem listy,
s e le c t p .T o S t r in g O ; to po prostu kolekcp elementów o danym nazwisku. W klauzuli e v e n t K e y E v e n t H a n d le r Key Up — zachodzi
jeśli właściwość DrawMode jest ustawiona na wartość inną niż
Pogrubiony fragment powyższego kodu to zapytanie LINQ. s e l e c t nieco przekształcamy zgrupowany zbiór, aby łatwiej można w momencie zwolnienia klawisza.
N orm al.
Ze względu na długość i strukturę zapytania LINQ są zazwyczaj było go wykorzystywać w dalszej części kodu. e v e n t M o u se Ev en tH a n d l e r Mo u seDown — zachodzi,
gdy nad kontrolką zostanie wciśnięty przycisk myszy, e v e n t E v e n t H a n d le r S e le c t e d ln d e x C h a n g e d
zapisywane w kilku wierszach. Wyniki zapytania (na|częściej kolekcje Ostatnią operacją, którą omówimy, jest złączanie kolekcji (ang. join).
e v e n t E v e n t H a n d le r M ouseHover — zachodzi, — zachodzi w momencie zmiany zaznaczonego elementu.
danych) najłatwiej jest zapisać do zmiennej o nieokreślonym typie, v a r im io n a = n ew [] { new { ID = 1,
gdy kursor spoczywa nad kontrolką dłużej, raz określono we
ponieważ typy wyników zwracanych przez zapytania LINQ są często Im ię = " J a n " ) , new ( ID = 2 , Im ię =
" A n d r z e j" } } ; właściwości S y s te m ln fo r m a tio n .M o u s e H o v e r T im e .
ContextMenuStrip
skomplikowane i wydłużają kod, a nie wnoszą nic do funkcjonalności Rozwijane menu kontekstowe (dołączane do innych kontrolek).
v a r f in a n s e = n ew O ( new { ID = 1, e v e n t M o u se Ev en tH a n d l e r MouseMove — zachodzi,
wyników. Pierwszą część praktycznie wszystkich zapytań LINQ
stanowi część fro m X in Y, w której określamy kolekcję
Z a r o b k i = 5 0 0 0 .0 } , new { ID = 2 , gdy kursor porusza się nad kontrolką, Właściwości klasy
e v e n t M o u se Ev en tH a n d l e r MouseUp — zachodzi,
źródłową (Y) i alias pojedynczego elementu kolekcji, na którym są
Z a r o b k i = 7 0 0 0 .0 } } ;
gdy przycisk myszy zostaje zwolniony,
ContextMenuStrip
v a r zgru p o w a n e = (fr o m i i n im io n a S yste m .W i n d o w s. F o rm s.
wykonywane operacje (X). W powyższym przykładzie każda liczba e v e n t E v e n t H a n d le r Move — zachodzi w trakcie
j o i n f i n f in a n s e on T o o l S t r i p lte m C o l 1 e c t i on Ite m s — określa listę
z tablicy jest konwertowana do łańcucha znaków, który wchodzi i . I D e q u a ls f . I D przemieszczania kontrolki.
elementów tworzących menu kontekstowe.
w skład nowej kolekcji. s e l e c t new ( i . I m i ę , e v e n t P a in t E v e n t H a n d le r P a in t — zachodzi
S y s t e m .W in d o w s .F o rm s.
Zapytania LINQ są bardzo często wykonywane na bardziej złożonych f .Z a r o b k i } ) ; w momencie odrysowania kontrolki,
T o o l S t r i p L a y o u t S t y le L a y o u t S t y 1 e — określa
obiektach, np. pochodzących z bazy danych. Taką sytuację symuluje Kolekcje imiona i finanse reprezentują dwie kolekcje z bazy danych, e v e n t E v e n t H a n d le r R e s i z e — zachodzi w trakcie
zmiany rozmiarów kontrolki. sposób ułożenia pozycji menu kontekstowego.
poniższy przykład: które pozostają ze sobą w relacji jeden do jednego. To, co łączy obie S yste m .W i n do w s. F o rm s. T o o l S t r i pRenderM ode
kolekcje, to ID. Dzięki operacji złączenia jesteśmy w stanie połączyć RenderM ode — określa sposób rysowania menu kontekstowego,
v a r t a b l i c a = new [] { new ( Im ię
ze sobą identyfikatory obu kolekcji, a co za tym idzie — możemy Komponenty wizualne b o o l Show Im ageM argi n — określa, czy elementy menu
= " J a n " , N a z w isk o = " K o w a l s k i " ) ,
wstawić do jednego rekordu informację o imionach i zarobkach Poniższe zestawienie zawiera opis komponentów dziedziczących zawierają miejsce na obrazki (t r u e — tak, f a l se — nie).
new { Im ię = " A n d r z e j " , N a z w isk o =
poszczególnych pracowników. Gdyby w grę wchodziła relacja jeden po klasie C o n t r o ! . Wszystkie one należą do przestrzeni S y ste m .W i n do w s. F o r m s .C o n tr o !
"Nowak" } } ;
do wielu (pracownik mógłby na przykład dysponować wieloma nazw S y s t e m . Wi n do w s. Form s. W niektórych S o u r c e C o n t r o l — określa kontrolkę, której kliknięcie
v a r im io n a = fro m p i n t a b l i c a
pensjami), to zostałoby zwróconych wiele elementów, w których imię przypadkach jest zaznaczona informacja o dziedziczeniu danego spowodowało wyświetlenie menu kontekstowego.
s e le c t p .Im ie ;
byłoby to samo, a zarobki — różne. elementu klasy. Ciąg dalszy na str. 5
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Metody klasy ContextMenuStrip S t r i ng Im a g e L o c a t i on — określa lokalizację, z której ma
być pobrany obrazek (za pomocą metod Load ( ) — synchronicznie
S yste m .W i n do w s. F o r m s .Tree N od e
S e l e cte d N o d e — określa aktualnie zaznaczoną gałąź.
Korzystanie w wątkach
v o id S h o w (S y s t e m .D r a w in g .P o in t p)
— wyświetla menu kontekstowe w danym punkcie. i Lo a d A sy n c ( ) — asynchronicznie). S yste m .W i n do w s. F o r m s .T ree N o d e TopNode z komponentów Ul
S yste m .W i n d o w s. F o rm s. P i c t u r e B o x S i zeMode — określa najwyżej znajdującą się w hierarchii i widoczną gałąź, Klasa B a c kgroundWo rke r może być z powodzeniem
wykorzystywana w większości operacji wymagających użycia wątków.
Zdarzenia klasy ContextMenuStrip Size M o d e — określa sposób wyświetlania obrazka w kontrolce S y s t e m . W ind o w s. F o rm s. T r e e V i e w N o d e S o rte r
Problem pojawia się, gdy zachodzi potrzeba skorzystania w metodzie
e v e n t E v e n t H a n d le r C lo s e d — zachodzi tuż (m.in. w sytuacji, gdy rozmiar obrazka jest różny od rozmiaru T r e e V i ew N o de So rt e r — określa obiekt sortujący drzewo.
kontrolki). wątku np. z komponentów graficznych. Są one tworzone w głównym
po zamknięciu menu kontekstowego.
e v e n t T o o l S t r i pD ro pD ow nC lo s i n gEv e n tH S y s t e m .D ra w in g . Im age I n i t i a l Im age — określa Metody klasy TreeView wątku aplikacji i z tego względu wątki poboczne nie ma|ą do nich
v o i d Co l 1 a p s e A l 1 ( ) — zwija wszystkie gałęzie dostępu Można jednak ominąć to zabezpieczenie, korzystając
a n d l e r C l o s i ng — zachodzi w trakcie zamykania menu obrazek, który będzie wyświetlany w trakcie ładowania się głównego
v o i d E xp a n d A l 1 () — rozwija wszystkie gałęzie. z implementowanego przez wszystkie kontrolki graficzne (pochodne
kontekstowego (można tę operację zablokować). obrazka.
S y s t e m .W in d o w s .F o r m s .Tree N od e klasy S yste m .W i n d o w s. F o rm s. C o n t r o l) interfejsu
e v e n t E v e n t H a n d le r Opened — zachodzi tuż b oo l Wa i 10 n Lo a d — określa, czy obrazek ma być ładowany
G e tN o de A t (P o i n t p) — zwraca gałąź znajdującą się I S y n c h r o n iz e ln v o k e .
po otwarciu menu kontekstowego. synchronicznie (tru e ), czy asynchronicznie ( f a 1 s e).
w danym punkcie (współrzędne punktu w odniesieniu do lewego
e v e n t C a n c e lE v e n t H a n d le r O p e n in g — zachodzi
Metody klasy PictureBox górnego rogu kontrolki). ISynchronizelnvoke
w momencie otwierania menu kontekstowego (można tę operację v o id Load ( ) — wczytuje obrazek synchronicznie. Właściwość v o id S o r t ( ) — sortuje drzewo za pomocą obiektu (System. ComponentModel)
zablokować). Wai tO n Lo a d musi mieć wartość tr u e , określonego we właściwości T r e e V i e w N o d e S o rte r. Najważniejszym elementem interfejsu jest metoda In v o k e () ;
v o id Lo a d A sy n c ( ) — wczytuje obrazek asynchronicznie. O b je c t In v o k e ( D e le g a t e delegacja,
DateTimePicker Właściwość Wai tO nLo a d musi mieć wartość f a l se. Zdarzenia klasy TreeView O b j e c t [ ] parametry)
Kontrolka umożliwiająca pobieranie i wybieranie daty za pomocą e v e n t T r e e V ie w E v e n t H a n d le r A f t e r C o l 1 a p se Metoda ta wywołuje asynchronicznie daną delegację wraz
wbudowanego kalendarza Zdarzenia klasy PictureBox — zdarzenie zachodzi po zwinięciu gałęzi. z parametrami. W delegacji należy podać metodę, która dokona
e v e n t A s y n c C o m p le te d E v e n tH a n d le r e v e n t T r e e V ie w E v e n t H a n d le r A ft e r E x p a n d zmian w kontrolkach (np. ustawi nową wartość etykiety tekstowej).
Właściwości klasy DateTimePicker LoadCompl e t ed — zachodzi, gdy skończy się ładowanie obrazka, — zdarzenie zachodzi po rozwinięciu gałęzi. Aby upewnić się, że dana kontrolka musi być zmieniona za pomocą
b oo l C h e cke d — określa, czy kalendarz wyświetla poprawną e v e n t P r o g r e s s C h a n g e d E v e n t H a n d le r e v e n t T r e e V ie w E v e n t H a n d le r A f t e r S e l e c t metody In v o k e , używa się właściwości In v o k e R e q u i red:
datę i czy jest włączony (możliwa jest zmiana daty; t ru e — tak, L o a d P r o g re s s C h a n g e d — zachodzi w trakcie procesu — zdarzenie zachodzi po zaznaczeniu gałęzi, b o o l In v o k e R e q u i re d — zwraca t r u e , jeśli do zmiany
f a l s e — nie). pobierania obrazka (tylko asynchronicznie). e v e n t T r e e V ie w E v e n t H a n d le r danego komponentu wymagana jest metoda I n vo k e ( ) , f a l se
S t r i ng Cu sto m F o rm at — umożliwia podanie własnego B e fo r e C o l 1 a p s e — zdarzenie zachodzi w przeciwnym razie.
formatu wyświetlania daty przy podaniu określonych znaczników ProgressBar przed zwinięciem gałęzi. Wątek można utworzyć w sposób klasyczny — za pomocą klasy
(jeśli właściwość Fo rm at ma wartość Custom). Komponent przedstawiający pasek postępu. e v e n t T r e e V ie w E v e n t H a n d le r B e fo re E x p a n d T h re a d . W konstruktorze obiektu tej klasy należy podać delegację,
S y ste m .W in d o w s. F o rm s . — zdarzenie zachodzi przed rozwinięciem gałęzi. jedną z możliwości jest delegacja T h r e a d S t a r t ( ).
D a t e T im e P ic k e r Fo rm a t Fo rm at — określa sposób Właściwości klasy ProgressBar e v e n t T r e e V ie w E v e n t H a n d le r B e f o r e S e le c t Konstruktor klasy T h re a d :
wyświetlania daty. i n t Maximum — określa maksymalną wartość, jaką może — zdarzenie zachodzi przed zaznaczeniem gałęzi. S y s t e m . T h r e a d in g . T h re a d T h r e a d (S y s te m .
b oo l ShowUpDown — określa, czy wyświetlane są przyciski osiągnąć pasek. e v e n t T re e N o d e M o u se C lic k E v e n t H a n d le r T h r e a d in g .T h re a d S t a rt T h r e a d S t a r t)
umożliwiające zmianę daty przy użyciu strzałek, a nie kalendarza i n t M in i mum — określa minimalną wartość, jaką może No d eMo u s e C 1 i c k — zachodzi w momencie kliknięcia gałęzi. — tworzy obiekt wątku, który wywoła metodę zawartą
( t r u e — tak, f a l s e — nie). osiągnąć pasek. w delegacji T h r e a d S t a r t .
D a t e T i me V a lu e — zwraca datę wybraną za pomocą i n t S te p — określa wartość, o jaką ma zwiększać się postęp Okna dialogowe Przykład:
przy wykonywaniu metody P e r fo rm S t e p ( ) . Okna dialogowe mają różny wygląd i działanie. Dzięld nim złożone
kalendarza.
i n t V a lu e — określa osiągniętą wartość postępu. operacje, takie jak np. wybór pliku z dysku, sprowadzają się Program wyświetla w etykiecie tekstowej klasy L a b e l
Label Metody klasy ProgressBar do wywołania jednej metody. Jednym z najprostszych rodzajów (obiekt l a b e l ) aktualny czas.
p r i v a t e T h re a d w a te k ;
Etykieta tekstowa; może wyświetlać również grafikę. okien dialogowych jest okno wyświetlające wiadomość
v o id In c r e m e n t ( i n t w a r t o ś ć ) — zwiększawartość p r i v a t e b oo l w a t e k M a D z ia la c = t r u e ;
— M essageB ox.
Właściwości klasy Label postępu o podaną wartość. p r i v a t e d e le g a t e v o id
b oo l A u t o S iz e — określa, czy wymiary etykiety będą v o id P e r fo rm S t e p ( ) — zwiększa wartość postępu MessageBox D e le g a c ja (S t r in g w a rto s c );
o wartość właściwości S te p . Okno dialogowe umożliwiające zaakceptowanie lub odrzucenie p r i v a t e v o id F o r m l_ L o a d ( o b je c t
dostosowywane do wyświetlanego tekstu (t r u e — tak,
propozycji; posiada bardzo dużo możliwości wyświetlania. s e n d e r , E v e n t A r g s e)
f a l s e — nie).
S yste m .W i n do w s. F o r m s . B o r d e r S t y l e
RadioButton Do wyświetlenia okienka wykorzystuje się metodę S how ( ) (
Pole do zaznaczenia, zawierające opis tekstowy. W jednej grupie A p p l i c a t i o n . A p p l i c a t i o n E x i t +=
B o r d e r S t y l e — określa rodzaj obramowania etykiety. (ma ona 21 wariantów):
komponentów R a d io B u t to n może być zaznaczone tylko new E v e n t H a n d le r ( A p p lic a t io n _
S y s t e m . D r a w in g . Im age Im age — określa obrazek S yste m .W i n d o w s. F o rm s. Di a l o g R e s u lt
jedno pole. A p p li c a t i o n E x i t ) ;
wyświetlany w etykiecie (jako tlo dla napisu). M e s s a g e B o x .S h o w ( S t r in g t y t u ł ,
w a te k = new T h re a d (n e w
S y s t e m . D raw i n g . S i z e Maxi mumSi z e (odziedziczona Właściwości klasy RadioButton S t r i n g o p i s , S y s t e m .W in d o w s .F o rm s.
T h r e a d S t a r t (M e t o d a W a t k u ));
z klasy C o n t r o l) — określa maksymalny rozmiar pola, w którym S yste m .W i n d o w s. F o rm s .A p p e a ra n c e M e ssa g e B o x B u tto n s p r z y c i s k i , S y ste m .
w a t e k .S t a r t ( ) ;
jest wyświetlana etykieta. Umożliwia to kontrolę nad sposobem A p p e a ra n c e — określa wygląd pola (podobnie jak w przypadku Wi n d o w s. F o r m s .M e s s a g e B o x Ic o n i ko n a)
M e ssa g e B o x B u tto n s i M e ssage B ox Ic o n są typami }
wyświetlania tekstu (np. w ilu linijkach zostanie wyświetlony tekst). komponentu Ch eckB ox). p r i v a t e v o id U s t a w E t y k i e t e ( S t r i n g
Właściwość ta ma pierwszeństwo przed właściwością A u t o S iz e . b oo l C h e cke d — określa, czy pole jest zaznaczone wyliczeniowymi; udostępniają wszystkie znane konfiguracje w a rto sc)
S t r i n g T e x t — określa tekst etykiety. (t r u e — tak, f a l se — nie). przycisków i Ikon.
{
S y s t e m .D r a w i n g .C o n t e n t A l ig n m e n t T e x t A l i gn Typ wyliczeniowy Di a l o g R e s u l t posiada wartości la b e l.T e x t = w a rto sc;
— określa wyrównanie tekstu etykiety. Zdarzenia klasy RadioButton dla wszystkich przycisków, jakie mogą pojawić się w okienku;
}
e v e n t E v e n t H a n d le r C h e c k e d C h a n g e d — zachodzi, w zwracanej przez metodę wartości jest określony wybrany p r i v a t e v o id M etod aW atku()
ListBox gdy nastąpi zmiana stanu pola. przez użytkownika przycisk.
{
Wybieralna lista elementów. w h ile (w a te k M a D z ia la c )
RichTextBox OpenFileDialog
{
Właściwości klasy ListBox Pole tekstowe o najbardziej rozbudowanych możliwościach spośród Bardzo ważną grupę okien dialogowych stanowią standardowe okna
S t r i n g t e k s t = D a te T im e .U tcN o w .
i n t C o l umnWidth — określa szerokość kolumn w trybie wszystkich kontrolek systemu Windows. systemu Windows służące do wykonywania określonych czynności.
T o S t r in g O ;
wielokolumnowym. Klasa O p enFi 1 e D i a l og udostępnia okno wyboru pliku.
i f (la b e l.In v o k e R e q u ire d )
b oo l H o r i z o n t a l S c r o l 1 b a r — określa, czy Właściwości klasy RichTextBox
(jeśli jest to konieczne) jest wyświetlany poziomy pasek przewijania b o o l A u to W o r d S e le c t io n — określa, czy możliwe jest Właściwości klasy OpenFileDialog {
b o o l C h e c k F i 1 e E x i s t s — określa, czy w przypadku D e le g a t e d e l e g a c j a = new
(t r u e — tak, f a l s e — nie). zaznaczenie tylko całych wyrazów (t r u e — tak, f a l se — nie),
wprowadzenia nazwy nieistniejącego pliku zostanie wyświetlone D e le g a c ja ( u s t a w E t y k i e t e ) ;
b oo l S c r o l l A l w a y sV i s i b l e — określa, czy pasek (paski) b oo l D e t e c t s U r l s — określa, czy adresy URL mają być
ostrzeżenie (t ru e — tak, f a l s e — nie). l a b e l . I n v o k e ( d e l e g a c j a , new
automatycznie zamieniane na odnośniki
przewijania są zawsze widoczne (t r u e — tak, f a l se — nie), S t r i n g F i l eName (odziedziczona po klasie F i 1 e D i a l og) o b j e c t [] { t e k s t } ) ;
S t r i n g R t f — zwraca zawartość pola tekstowego w formacie RTF
b o o l Mul t i C o l umn — włącza lub wyłącza tryb — zwraca nazwę wybranego pliku. }
S t r i n g S e 1 e c t e d R t f — zwraca aktualnie zaznaczony tekst
wielokolumnowy listy. W tym trybie elementy listy są wyświetlane S t r i ng [] F i l eNames (odziedziczona po klasie e l se
w formacie RTF.
w taki sposób, aby nie aktywować pionowego paska przewijania F i 1 eDi a l og) — zwraca nazwy wybranych plików (jeśli U s t a w E t y k ie t e (t e k s t );
S y s t e m .D r a w i n g . F o n t S e l e c t i o n F o n t
(po maksymalnym wypełnieniu pierwszej kolumny elementy właściwość Mul t i S e l e c t ma wartość tru e ). T h r e a d . S le e p ( lO O O ) ;
— umożliwia zmianę czcionki dla zaznaczonego fragmentu. Zmieniając
dodawane są do kolumn następnych). S t r i ng F i 1 t e r (odziedziczona po klasie F i l eDi a l og) 1
tę właściwość w sytuacji, gdy jest zaznaczony fragment tekstu,
S y s t e m .W in d o w s .F o rm s. — określa rodzaje filtrów, według których wyświetlane są jedynie pliki }
umożliwia się zmianę formatowania (podobnie jak inne właściwości
S e le c t e d O b je c t C o l 1 e c t i on S e le c t e d lt e m s o danym rozszerzeniu. p r i v a t e v o id A p p l i c a t io n _
ma|ące w nazwie słowo S e l e c t i on).
— zwraca wszystkie zaznaczone elementy listy, jeśli właściwość A p p lic a t io n E x it ( o b je c t s e n d e r,
S t r i n g T e x t — zwraca zawartość pola tekstowego, b oo l Mul t i S e l e c t — określa, czy jest możliwy wybór wielu
S e l e c t i onMode ma wartość Mul t i S im p l e E v e n t A r g s e)
b oo l W ordwrap — określa, czy tekst w kontrolce jest zawijany plików (t r u e — tak, f a 1 s e — nie).
lub M u lt i E xte n d e d . {
( t r u e — tak, f a l s e — nie).
S yste m .W i n d o w s. F o rm s . S e l e c t i onMode f 1 o a t Z o o m F a c to r — określa stopień powiększenia tekstu Metody klasy OpenFileDialog w a t e k M a D z ia la c = f a l s e ;
S e l e c t i onMode — określa sposób, w jaki użytkownik może S yste m .W i n do w s. F o r m s .D i a l o g R e s u lt 1
(większy od 1 — tekst zostaje powiększony; mniejszy od 1 — tekst
wybrać element(y) listy. zostaje pomniejszony). ShowDi a lo g ( ) (odziedziczona po klasie CommonDi a l og) W momencie załadowania formatki jest tworzony i uruchamiany
— wyświetla okienko dialogowe I zwraca rodza| wybranego wątek. Ustawiana jest również metoda obsługi zamknięcia aplikacji.
Metody klasy ListBox Metody klasy RichTextBox przycisku. Wynika to z faktu, iż aplikacja systemu Windows zostaje zamknięta
v o id C l e a r S e l e c t e d ( ) — usuwazaznaczenie v o id L o a d F i l e f s t r i n g n azw a , S y ste m . dopiero wtedy, gdy wszystkie wątki przez nią utworzone są
ze wszystkich zaznaczonych elementów listy, W ind o w s. F o rm s. R i c h T e x tB o x S tr e a m T y p e t y p ) PrintDialog zamknięte. Jako Iż metoda wątku działa non stop, musi zostać
b oo l G e t S e l e c t e d ( i n t i n d e x ) — zwracatr u e , — wczytuje tekst z pliku, uwzględniając podany typ dokumentu Ten rodza| okna dialogowego jest wyświetlany przed rozpoczęciem
zatrzymana w specjalny sposób (przez zmianę wartości zmiennej
jeśli element o danym indeksie jest zaznaczony (istnieje możliwość wyboru między czystym tekstem a odmianami drukowania dokumentów.
w atekM aD zi a l ac). W ten sposób wątek kończy swe działanie
( f a l se w przeciwnym razie), formatu RTF).
v o id S e t S e l e c t e d ( i n t in d e x , bool i n t G e t L in e F r o m C h a r In d e x ( in t in d e x )
Właściwości klasy PrintDialog i aplikacja może zostać zamknięta. W metodzie MetodaWat ku ()
S y s t e m . D raw i n g . P r i n t i n g . P r i n tD ocum ent pobieramy aktualny czas, a następnie tworzymy delegację. Następnie
w a r t o ś ć ) — ustawia zaznaczenie danego elementu — zwraca numer linii, w której znajduje się znak o podanym indeksie, wywołujemy metodę I nvoke ( ) , uwzględniając parametr, jakim
Docum ent — określa dokument przeznaczony do drukowania.
na określoną wartość. v o id S a v e F i 1 e ( S t r i n g n azw a , S y ste m . jest łańcuch z aktualnym czasem. Metoda U sta w E ty k i e te ()
S y ste m .W in d o w s. F o rm s. P r i n t e r S e t t i n gs
Wi n do w s. F o r m s . R i c h T e x tB o x S tr e a m T y p e t y p ) jest odpowiedzialna tylko za zmianę tekstu etykiety — jej nagłówek
MenuStrip — zapisuje zawartość pola tekstowego do pliku, uwzględniając podany
P r in t e r S e t t i n g s — określa ustawienia drukarki, jakie
zostaną wykorzystane do drukowania.
musi być zgodny z typem delegacji.
Menu systemowe aplikacji widoczne na górze formatki. typ (jak w przypadku metody Load F i 1 e ( ) ).

Właściwości klasy MenuStrip


i n t F i n d ( S t r i n g 1 a n c u c h ) — zwracapoczątek Metody klasy PrintDialog Rysowanie
(indeks pierwszego znaku) fragmentu pola tekstowego, który zawiera S y s te rn .W in d o w s .F o r m s .D i a l o g R e s u lt Platforma .NET udostępnia spore możliwości w zakresie rysowania
S yste m .W i n d o w s. F o rm s. dany łańcuch. 2D. Wszystkie omawiane w niniejszym podrozdziale klasy i struktury
ShowDi a l og ( ) (odziedziczona po klasie CommonDi a l og)
T o o l S t r i p lte m C o l l e c t i o n Ite m s (odziedziczone zawarte są w przestrzeni nazw S y s t e m . D raw i ng.
— wyświetla okienko dialogowe i zwraca rodzaj wybranego
z T o o l S t r i p) — przechowuje elementy menu. Zdarzenia klasy RichTextBox przycisku.
Wszelkiego rodzaju funkcje do rysowania linii, luków, figur i innych
S yste m .W i n d o w s. F o rm s. e v e n t L i n k C lic k e d E v e n t H a n d le r konstrukcji geometrycznych dostarcza klasa G r a p h i c s . Poniżej
L i n k C l i ck e d — zachodzi w momencie kliknięcia przez Pozostałe okna dialogowe mają podobne właściwości i metody; są to:
T o o l S t r i p T e x t D i r e c t i on T e x tD i r e c t i on znajdują się najpopularniejsze metody uzyskiwania do niej dostępu.
użytkownika odnośnika. o C o l o r D i a l og — okienko do wyboru koloru; • Obiekt tej klasy jest zwracany przez metodę
(odziedziczone z To o 1 S t r i p) — określa sposób wyświetlania
e v e n t E v e n t H a n d le r S e le c t io n C h a n g e d • F o l d e r B ro w s e rD i a l og — okienko do wyboru C r e a t e G r a p h ic s ( ) klasy C o n t r o l i jej pochodnych.
menu (np, horyzontalny, wertykalny).
— zachodzi, gdy nastąpi zmiana obszaru zaznaczenia. katalogu; W tym przypadku uzyskiwany jest dostęp do obszaru danej
Metody klasy MenuStrip o F o n tD i a lo g — okienko do wyboru czcionki, kontrolki.
S yste m .W i n do w s. F o rm s . T o o l S t r i p i tern TreeView • P a g e S e t upD i a 1 o g — okienko do zmiany ustawień strony
G e t It e m A t ( S y s t e m .D r a w in g .P o in t p) Komponent wyświetlający swoje elementy w postaci rozwijanych (w procesie drukowania); P a i n t E v e n t A r g s (jako właściwość G ra p h i c s
— zwraca element znajdujący się w danym punkcie. gałęzi (z ang. node). o S a v e F i 1 eD i a l og — okienko do wyboru nazwy pliku tej klasy) stanowiącą argument delegac|i zdarzenia P a i n t
do zapisania. (również w klasie C o n tr o l).
PictureBox Właściwości klasy TreeView Obiekt tej klasy jest udostępniany przez klasy
Komponent umożliwiający wyświetlanie obrazków. S yste m .W i n d o w s. F o rm s.T re e N o d e C o l 1 e c t i on
N odes — określa całkowitą strukturę gałęzi, jaką posiada kontrolka.
Wybrane zagadnienia D ra w Ite m E v e n tA r g s lM e a s u re Ite m E v e n tA r g s
(jako właściwość Gra p h i c s tych klas), dostępne w zdarzeniach
Właściwości klasy PictureBox S t r i n g P a t h S e p a r a t o r — określa znak lub ciąg znaków W niniejszym podrozdziale znajduje się opis szeregu zagadnień Draw11em i Measu re 1 1 em — są to zdarzenia używane
S y s t e m . D r a w in g .Im age Im a g e — określa obrazek, służący do oddzielania nazw kolejnych gałęzi przy podawaniu ścieżek z różnego rodzaju zakresu; każdy opis zawiera listę i krótką w kontrolkach-listach (np. ComboBox, L i s tB o x )
który będzie wyświetlany dostępu do gałęzi. charakterystykę używanych klas I interfejsów oraz praktyczny przykład. przy ręcznym rysowaniu elementów list.

5
Tablice in fo rm a ty c z n e . C # . W yd an ie II
Klasa G r a p h ic s udostępnia wiele metod służących do rysowania; S t r i n g [ ] G e t F i l e s ( S t r i n g ś c i e ż k a ) — pobiera b oo l CanW ri t e — określa, czy strumień ma możliwość S tre a m R e a d e r s t ru m ie ń = F i l e .
poniżej wyszczególniono niektóre z nich: wszystkie pliki z danego katalogu (nie z jego podkatalogów!). zapisywania danych (t r u e — tak, f a l se — nie), O p e n T e x t ( s c ie z k a );
v o id D ra w E ll ip s e ( P e n p io r o , R e c t a n g le S t r i ng [] G e tF i 1 e S y s t e m E n tr i e s ( S t r i ng lo n g L e n g th — określa długość strumienia. in t i = 0;
p r o s t o k ą t ) — rysuje elipsę ograniczoną przez dany prostokąt ś c i e ż k a , S t r i n g w z o r z e c ) — zwraca wszystkie nazwy 1 ong P o s it i o n — określa aktualną pozycję w strumieniu, S t r i n g Q b u f o r = new S t r i n g [ 5 ] ;
przy użyciu określonego rodzaju pióra plików i katalogów z danego katalogu pasujące do określonego wzorca. i n t ReadT i m eout — określa maksymalny czas, przez jaki w h ile ( i < 5 && ¡ s t r u m ie ń .
v o id D ra w lin a g e (Im a g e o b r a z , P o in t p) D a te T im e G e t L a s t A c c e s s T im e ( S t r in g strumień będzie probowal czytać dane ze strumienia, E n d O fS tre a m )
— rysuje obraz w danym punkcie. ś c i e ż k a ) — zwraca czas ostatniego dostępu do danego katalogu. i n t W ri t e T i meout — określa maksymalny czas, przez jaki {
v o id D ra w L in e (P e n p io r o , P o in t p l , P o in t D a te T im e G e t L a s t W r it e T im e f S t r i n g strumień będzie próbował zapisać dane do strumienia. b u f o r [ i ] = s t ru m i e n . R e a d L i n e ( ) ;
p 2) — rysuje linię prostą między dwoma punktami przy użyciu ś c i e ż k a ) — zwraca czas ostatniego zapisu do danego katalogu. i += 1 ;
określonego rodzaju piorą. S t r i ng [] G e t l _ o g i c a l D r i v e s ( ) — zwraca wszystkie Metody klasy Stream }
v o id C l o s e ( ) — zamyka strumień i zwalnia jego zasoby,
v o id D ra w P o ly g o n (P e n p io r o , P o i n t [] dyski logiczne lokalnego komputera s t r u m ie ń .C lo s e ( ) ;
p u n k t y ) — rysu|e wielokąt zlozony z punktów o podanych v o id M o v e (S t r in g z r o d l o , S t r i n g c e l ) — v o id F I us h ( ) — przesyła całą aktualną zawartość
S t r i n g Q w y n ik = new S t r i ng [ i ] ;
współrzędnych przy użyciu określonego rodzaju pióra, przenosi katalog źródłowy do katalogu docelowego wraz z podkatalogi wewnętrznego bufora strumienia do docelowego obiektu,
A r r a y .C o p y ( b u f o r , w y n ik , i ) ;
v o id D ra w R e c t a n g le (P e n p io r o , R e c t a n g le i plikami. Katalog docelowy nie może wcześniej istnieć (w przeciwnym in t R e a d (b y te [] b u fo r, in t o f f s e t , in t
r e t u r n w y n ik ;
razie zostanie wygenerowany wyjątek klasy IO E x c e p t i on), i l o s c ) — zwraca ilość odczytanych danych. Są one umieszczane
p r o s t o k ą t ) — korzystając z podanej struktury, rysuje prostokąt )
przy użyciu określonego rodzaju pióra, v o id S e t L a s t A c c e s s T i m e ( S t r i n g ś c i e ż k a , w danej tablicy, począwszy od elementu o indeksie o f f s e t .
v o id D r a w S t r i n g ( S t r i n g t e k s t , F o n t D a te T im e d a t a ) — zmieniaczas ostatniego dostępu do Maksymalna ilość odczytanych bajtów to i 1 o sc. Zwrócony wynik W powyższych metodach najbardziej skomplikowana jest obsługa
c z c i o n k a , Pen p io r o , P o in t F p u n k t) danego katalogu. nie musi być równy parametrowi i l o s c . sytuacji, gdy plik nie ma określonych przez program 1024 bajtów
v o id S e t L a s t W r i t e T im e ( S t r i n g ś c i e ż k a , i n t R e a d B y t e ( ) — wczytuje i zwraca jeden bajt. Jeśli wystąpi lub 5 linii tekstu. Dzięki użyciu pomocniczych tablic b u f o r i metody
— wypisuje w podanym punkcie tekst.
Niektóre z powyższych metod posiadają odpowiedniki rysujące D a te T im e d a t a ) — zmienia czas ostatniego zapisu do danego błąd (dowolnego rodzaju), zwracana jest wartość - I (dlatego zwracana A r r a y . Co p y () można jednak szybko tę sytuację rozwiązać.
odpowiednie figury z wypełnieniem (zamiast klasy Pen używa się katalogu. jest wartość typu in t j.
klasy B ru sh ), np: lo n g S e e k ( lo n g o f f s e t , S e e k O r ig in XML (model DOM) w C#
v o id F i l l E l l i p s e ( B r u s h p e d z e l , R e c t a n g le File p u n k t_ o d n i e s i en i a ) — przesuwa wskaźnik pozycji Klasy i interfejsy do obsługi języka XML znajdują się w przestrzeni
Klasa służy do uzyskiwania informacji o plikach. Umożliwia także w strumieniu o wartość o f f s e t , uwzględniając dany p u n k t_ nazw S y ste m .X m l Podstawową klasą jest klasa
p r o s t o k ą t ) — rysuje przy użyciu określonego rodzaju pióra
ich tworzenie, edycję oraz usuwanie. Dostęp do plików przy użyciu o d n ie s ie n ia . Xml Docum ent. Za pomocą tej klasy można załadować dokument
elipsę z wypełnieniem ograniczoną przez dany prostokąt.
strumieni jest omawiany w dalszej części tablicy W poniższym v o id W r i t e ( b y t e [ ] b u f o r , i n t o f f s e t , i n t XML z pliku, strumienia lub przy użyciu wyspecjalizowanych klas-
W powyższych deklaracjach są używane klasy B ru sh , Fo nt,
Pen, które określają sposób rysowania określonych kształtów zestawieniu nie są ujęte metody pobierające czasy ostatniego dostępu, i 1 o sc ) — zapisuje do strumienia i 1 o s c bajtów z danej tablicy, czytników (klasa Xml R e a d e r i jej pochodne).
i napisów. Klasa B ru sh określa sposób rysowania figur wypełnionych ostatniego zapisu do pliku, gdyż ich składnia jest identyczna ze składnią począwszy od elementu o indeksie o f f s e t , Po utworzeniu obiektu dokumentu (konstruktor domyślny) należy
(me jest ona wykorzystywana bezpośrednio; korzysta się z jej Idas odpowiednich metod dotyczących katalogów, v o id Wri t e B y t e ( b y t e b ) — zapisuje bajt do strumienia. wywołać jego metodę Load ( ) , aby wczytać dane:
v o id C o p y ( S t r i n g z r o d l o , S t r i n g c e l , Jednym z najpopularniejszych przykładów użycia strumieni jest v o id L o a d ( S t r in g l o k a l i z a c j a ) — wczytuje
pochodnych), a Pen niewypełnionych. Klasa F o nt odpowiada
b oo l n a d p is y w a n ie ) — kopiuje plik pomiędzy określonymi modyfikowanie plików. W poprzednim podrozdziale zostały dokument XML z podanego adresu (zarowno lokalnego,
za określenie rodzaiu czcionki (m.in. kro|u i rozmiaru). Sposób ich
wykorzystania jest zaprezentowany w poniższym przykładzie. lokalizacjami. Jeśli argument n a d p is y w a n i e ma wartość tr u e , opisane operacje na systemie plików. Klasa F i l e udostępnia wiele jak i sieciowego).
plik znajdujący się w ścieżce c e 1 zostanie nadpisany interesujących metod, które wykorzystują strumienie, a pozwalają na Aby uzyskać dostęp do głównego elementu dokumentu (tzw. korzenia),
Przykład: v o id D e l e t e ( S t r i n g ś c i e ż k a ) — usuwa podany plik. zmianę zawartości plików trzeba wykorzystać właściwość D ocum entEl ement:
Program narysuje na formatce quasi-domek. v o id D e c ry p t ( S t r i n g ś c i e ż k a ) — odszyfrowuje plik Xml E le m e n t D ocum entEl e m en t— określa element
p r i v a t e v o id F o r m l_ P a in t ( o b j e c t zaszyfrowany przy użyciu metody E n c r y p t ( ) . File (ciąg dalszy) korzenia w danym dokumencie XML
s e n d e r , P a in t E v e n t A r g s e) v o id E n c r y p t ( S t r i n g ś c i e ż k a ) — szyfruje plik. S tr e a m W r ite r A p p e n d T e x t ( S t r in g ś c i e ż k a )
Klasa Xml E l emen t (podobnie jak Xml Docum ent) dziedziczy
Tylko użytkownik, który zaszyfrował plik, może go odszyfrować. — otwiera podany plik do dopisywania w trybie tekstowym (UTF-8)
{ po klasie Xml Node, która jest klasą bazową dla obiektów
G r a p h ic s g = e .G r a p h i c s ; Dwie powyższe metody dotyczą tylko systemów Windows NT i zwraca strumień obsługujący ten plik.
reprezentujących elementy języka XML.
i późniejszych, obsługujących system plików NTFS. F ile S t r e a m C r e a t e ( S t r i n g ś c i e ż k a ) — tworzy
P o i n t [] p u n k ty D a c h = new P o i n t []
{ new P o i n t (1 0 0 , 0 ) , new P o in t F ile A t t r ib u t e s G e t A t t r ib u t e s ( S t r in g plik znajdujący się w podanej ścieżce i zwraca strumień obsługujący XmlNode
ś c i e ż k a ) — zwraca atrybuty dla podanego pliku, ten plik w trybie binarnym. Klasa reprezentuje pojedynczy element dokumentu XML.
( 0 , 7 5 ) , new P o i n t (2 0 0 , 7 5) } ;
v o id M o v e (S t r in g z r o d l o , S t r i n g c e l ) S tr e a m W r ite r C r e a t e T e x t ( S t r i n g ś c i e ż k a )
R e c t a n g le dom = new R e c t a n g le ( 2 5 ,
7 5 , 1 5 0 , 1 0 0 ); — przenosi plik między podanymi ścieżkami. — tworzy plik znajdujący się w podanej ścieżce i zwraca strumień Właściwości klasy XmlNode
v o id R e p l a c e ( S t r i n g z r o d l o , S t r i n g c e l , obsługujący ten plik w trybie tekstowym Xml A t t r i b u t e C o l l e c t i o n A t t r i b u t e s — określa
R e c t a n g le o kn o = new R e c t a n g le (7 5 ,
S t r i n g k o p ia c e lu ) — przenosi plik między ścieżkami F ile S t r e a m O p e n R e a d ( S t r i n g ś c i e ż k a ) atrybuty elementu.
25, 45, 4 5 );
z r o d l o a c e l .Oryginalna zawartość pliku c e l zostaje zapisana — otwiera podany plik do odczytu i zwraca strumień obsługujący Xml N o d e Li s t C h i 1 dNodes — określa wszystkie elementy
P o in t F p u n k t N a p is u = new
wścieżce ko p i a c e l u. ten plik w trybie binarnym. należące do danego elementu.
P o i n t F ( 7 0 . 0 F , 8 0 . O F );
v o id S e t A t t r i b u t e s ( S t r i n g ś c i e ż k a , S tre a m R e a d e r 0 p e n T e x t ( S t r i n g ś c i e ż k a ) S t r i n g Name — określa nazwę elementu.
B ru sh c z e r w o n y P e ln y = new
F i 1 e A t t r i b u t e s a t r y b u t y ) — ustawia określone — otwiera podany plik do odczytu i zwraca strumień obsługujący Xml N odeType N odeType — określa typ elementu.
S o l i d B r u s h (C o l o r . R e d ) ; ten plik w trybie tekstowym.
atrybuty dla podanego pliku. S t r i ng V a l ue — określa wartość elementu.
B ru sh c z a r n y P e ln y = new F ile S t r e a m O p e n W rite ( S t r i n g ś c i e ż k a )
S o lid B r u s h (C o lo r .B 1 a c k ); Przykład: — otwiera podany plik do zapisu i zwraca strumień obsługujący Metody klasy XmlNode
B ru sh n ie b i e s k o B i a l y = new Metoda zwraca w postaci tablicy obiektów klasy S t r i n g listę ten plik w trybie binarnym. Xm lNode In s e r t A f t e r ( X m lN o d e now y,
S y s t e m .D r a w i n g . D raw i n g2 D . wszystkich podkatalogów i plików dla danego katalogu. Do opisu S t r i n g Q ReadA l 1 L i n e s ( S t r i n g ś c i e ż k a ) Xm lNode p u n k t O d n ie s ie n ia ) — zwracanowo
L in e a r G r a d ie n t B r u s h (d o m , C o l o r . katalogu dodana jest liczba zawartych w nim plików, a do opisu pliku — wczytuje podany plik w trybie tekstowym i umieszcza jego dodany element XML, który jest wstawiany za elementem
B lu e , C o lo r .W h it e , 1 8 0 ); — określające go atrybuty. zawartość w tablicy łańcuchów (|edna linijka tekstu — jeden łańcuch), p u n k t O d n ie s ie n ia .
B ru sh b ia l y P e l n y = new p r i v a t e S t r i n g Q m etoda ( S t r i n g po czym zamyka plik. Xm lNode R e m o ve C h ild (X m lN o d e e le m e n t)
S o l i d B r u s h (C o lo r .W h i t e ) ; s c i e zka ) v o id W r i t e A l l L i n e s ( S t r i n g ś c i e ż k a , — zwraca usunięty element.
g . F i l l P o ly g o n (c z e r w o n y P e ln y , S t r i n g Q z a w a r t o ś ć ) — zapisuje podaną tablicę łańcuchów
ł Xm lNode R e p la c e C h ild (X m lN o d e now y,
p u n k ty _ d a c h ); S t r i n g Q p l i k i = D ir e c t o r y . do pliku w trybie tekstowym (|eden łańcuch — jedna linijka tekstu). Xm lNode s t a r y ) — zwraca stary element, który uprzednio
g . F i l l R e c t a n g l e ( c z a r n y P e l n y , d o m ); G e t F ile s ( s c ie z k a ) ; W nagłowiach powyższych metod znajdują się odwołania do został zamieniony na nowy.
g . F i 11 E l 1 i p s e ( n i e b i e s k o B i a ly , o k n o ) ; S t r i n g Q k a t a l o g i = D ir e c t o r y . trzech klas strumieni: F i 1 e S t r e am, S t r e am Re a d e r
g . D r a w S t r i n g C 'W i t a j ! 11, new G e t D ir e c t o r ie s (s c ie z k a ); i S tr e a m W r ite r . Pierwsza śluzy do obsługi pliku w trybie Przykład:
F o n t ( " C o u r i e r " , 1 2 . O F ), i n t i lo s e = p l i k i . L e n g th + binarnym, dwie pozostałe do obsługi pliku w trybie tekstowym. Program wyświetla wartości elementu imię z podanego
b ia ł y p e łn y , p un kt n a p is u ); k a t a lo g i.L e n g th ; Różnica między tymi typami plików polega na tym, ze plik binarny dokumentu XML:
1 S t r i ng [] w y n ik i = new jest sekwenqą bajtów, natomiast plik tekstowy — sekwencją linii dokumenUml
S t r in g Q lo s c ] ; (łańcuchów przedzielanych znakami nowej linii— w systemie <?xm l v e r s io n = " 1 .0 " ? >
W pierwszej części kodu określamy kształty, jakie będą mieć Windows znaki nowe| linii to znaki o kodach 13 i 10).
in t l ic z n ik = 0; < o so b y >
poszczególne elementy „domu”. Następnie tworzymy obiekty pędzli,
f o r e a c h ( S t r i n g nazwa in k a t a l o g i ) Jeśli jest dostępny strumień F i 1 e S t ream, a istnieje konieczność < o so b a >
po czym przystępujemy do rysowania. Ważne jest, aby umieścić ten użycia któregoś z pozostałych dwu strumieni, można wykorzystać
kod w zdarzeniu P a i n t formatki (tudzież innego komponentu { < im ie > J a n < / im ie >
w y n i k i [1 i c z n i k ] = n a z w a + "; I l o s c ich konstruktory: < n a z w is k o > K o w a ls k i< / n a z w i sk o >
graficznego), aby było ono odrysowywane za każdym razem S tre a m R e a d e r r e a d e r = new S tre a m R e a d e r
p lik ó w : " + D ir e c t o r y . < / o so b a >
(a nie tylko tuz po uruchomieniu). ( o b ie k t K la s y F ile S t r e a m ) ;
G e t F i l e s ( n a z w a ) .L e n g t h ; < o so b a >
S t r e a m W r it e r w r i t e r = new S tr e a m W r ite r
Korzystanie z systemu plików l i c z n i k += 1;
(o b i e k t K l a s y F i 1 e S t r e a m ) ;
< i mi e > A n d r z e j< / i mi e>
< n a zw i sk o > N o w a k< /n a zw i sk o >
Przestrzeń"nazw S y s t e m . 10 udostępnia cztery klasy związane 1
fo r e a c h ( S t r i n g nazwa in p l i k i ) Do obsługi plików binarnych przestrzeń nazw S y s te m . 10 < / o so b a >
z przeglądaniem katalogów i uzyskiwaniem informacji o plikach. Są to oferuje również klasy B i n a r y R e a d e r i B i n a ry W ri t e r .
klasy Di r e c t o r y , Di r e c t o r y l n f o I F i 1 e, F i 1 e ln f o . { < /o s o b y >
w y n ik i [ l i c z n i k ] = nazwa Udostępniają one szereg wariantów metody, odpowiednio: Read ()
Klasy Di r e c t o r y i Di r e c t o r y l n f o różnią się tylko tym, Kod programu:
+ 11; A t r y b u t y : 11 + F i l e . i Wr i t e ( ) ; dzięki nim możliwy jest odczyt i zapis zmiennych
iż klasa Di r e c t o r y całą swą funkcjonalność opiera na metodach p r i v a t e v o id M etodaXM L()
G e t A t t r i b u t e s (n a zw a ) . T o S t r i n g O ; takich typów, jak b o o l, c h a r , d e c im a l, d o u b l e, f 1 o a t,
statycznych, podczas gdy klasa Di r e c t o r y l n f o oferuje S t r i ng oraz c h a r [ ] , oraz typów liczbowych bez znaku, np. ł
tworzenie obiektów i odwołania do metod za pomocą instancji l i c z n i k += 1; Xml Docum ent dokum ent = new
F ile S t r e a m s t r u m ie ń = F i l e .
obiektu (analogicznie wygląda sytuacja w przypadku klas F i 1 e } Xml D ocum e nt( ) ;
O p e n R e a d (@ "c :\ d o k u m e n t.x m l" } ;
i F i 1 e l n f o — dotyczą one operacji na plikach). r e t u r n w yni k i ; d o k u m e n t. L o a d (@ " c :\d o k u m e n t. x m l" ) ;
B in a r y R e a d e r c z y t n i k = new
} Xml E le m e n t e le m e n t = dokum e nt.
B i n a r y R e a d e r ( s t r u m ie n ) ;
Directory Operacje na plikach I katalogach zostały rozdzielone ze względu na ch a r c = c z y t n ik .R e a d C h a r ();
D o cu m e n tE le m e n t;
Klasa udostępnia informacje na temat struktury katalogów oraz f o r e a c h (Xm lN ode node in e le m e n t.
różnice w ich opisie. Powyższą metodę można nieco skrócić przez c z y t n ik .C lo s e ();
szczegółowych danych dotyczących poszczególnych katalogów. C h ild N o d e s )
zastosowanie jednolitego opisu dla wszystkich elementów. Wywołania
Wszystkie jej metody są oznaczone jako statyczne. Przykład: i
metod G e t F i 1 e s ( ) i G e tD i r e c t o r i es ( ) można zastąpić
Di r e c t o r y l n f o C r e a t e D i r e c t o r y ( S t r i ng Pierwsza metoda zwraca początkowe 1024 bajty z pliku o danej i f (n o d e .N odeType == Xm lN o d eT yp e .
metodą Di r e c t o r y .G e t F i l e S y s t emEn t r i e s ( ) ,
s c i e z k a ) — tworzy katalog o podanej ścieżce, ścieżce, a druga metoda zwraca 5 początkowych linii tekstu E le m e n t)
a dwie konstrukcje f o r e a c h — jedną.
v o id D e l e t e ( S t r i n g ś c i e ż k a , bool (obydwie metody zwracają dane, jeśli są możliwe do odczytania). {
p o d k a t a l o g i ) — usuwa katalog o podanej nazwie, jeśli
argument p o d k a t a l o g i ma wartość tr u e , zostaną usunięte
Strumienie p r iv a t e b y te Q c z y t a jB in a r n e ( S t r in g
ś c ie ż k a )
f o r e a c h (Xm lN ode n in n o d e .
C h ild N o d e s )
Strumienie stanowią abstrakcyjną konstrukcją obsługującą ciąg bajtów.
również podkatalogi i pliki wewnątrz katalogu (jeśli argument ma { {
Ogromna większość operacji polegających na wczytywaniu i zapisywaniu
wartość f a 1 s e, a istnieją podkatalogi bądź pliki, metoda zwróci F ile S t r e a m s t ru m ie ń = F i l e . i f (n.N am e == " im ie " )
danych wykorzystuje strumienie. Klasą bazową dla wszystkich strumieni
wyjątek klasy IO E x c e p t i on), O p e n R e a d ( s c ie z k a ) ; M e s s a g e B o x .S h o w ( r .F ir s t C h ild .
jest klasa S t ream. Jest to klasa abstrakcyjna Większość metod jako
b o o l E x i s t s ( S t r i n g ś c i e ż k a ) — zwracat r u e , b y t e Q b u f o r = new b y t e [ 1 0 2 4 ] ; V a lu e );
argumenty przyjmuje obiekty właśnie tej klasy, co gwarantuje niezwykłą
jeśli podany katalog istnieje, f a 1 s e w przeciwnym wypadku i n t i l o s c = s t r u m ie ń .R e a d f b u f o r , }
elastyczność kodu (w takiej sytuacji można podać zarówno strumień
S y s t e m .S e c u r it y .A c c e s s C o n t r o l. 0 , 1 0 2 4 ); }
obsługujący plik, jak I połączenie internetowe!). Klasy strumieni znajdują
D ir e c t o r y S e c u r i t y b y t e Q w y n ik = new b y t e [ i l o s c ] ; 1
się w przestrzeni nazw S y ste m . 10.
G e t A c c e s s C o n t r o l ( S t r i n g ś c i e ż k a ) — zwraca A r r a y . C o p y ( b u f o r , w y n ik , i l o s c ) ;
}
systemowe uprawnienia dostępu dla katalogu. Właściwości klasy Stream s t r u m ie ń .C lo s e ( ) ;
r e t u r n w y n ik ;
D a te T im e G e t C r e a t io n T im e f s t r in g ś c i e ż k a ) b oo l CanRead — określa, czy strumień ma możliwość czytania Przy użyciu pierwszej instrukcji warunkowej sprawdzane są tylko
— zwraca datę i czas utworzenia katalogu (wyrażony za pomocą danych (t r u e — tak, f a l se — nie), 1 elementy oso ba. Następnie w danym elemencie o so b a jest
p r i v a t e S t r i ng [] c z y t a j T e k s t ( S t r i n g szukany element i mi e. Na końcu program uzyskuje dostęp
czasu lokalnego). b oo l C a n T i meout — określa, czy strumień może przerwać
ś c ie ż k a ) do pierwszego i jedynego elementu należącego do elementu
S t r i n g Q G e tD i r e c t o r i e s ( S t r i ng ś c i e ż k a ) oczekiwanie na zapis lub odczyt w przypadku przekroczenia limitu
— pobiera wszystkie nazwy podkatalogów z danego katalogu. czasu oczekiwania (t r u e — tak, f a l se — nie). ( im ie — wartości tekstowej.

Wydawnictwo Helion Sprawdź najnowsze promocje: O http://helion.pl/promocje ISBN 978-83-246-3861-1


K siążki najchętniej czytane: O http://helion.pl/bestsellery

Ul
ul K ościuszki 1c, 44-100 Gliw ice Zam ów informacje o nowościach: O http://helion.pl/nowosci
tel.: 32 230 98 63
e-mail: helion@ helion.pl
http://helion.pl Aby ocenić tę tablicę, zajrzyj pod adres:
heliony
k s i ę g a r r n i
I n fo r m a t y k a w n a jle p s z y m w y d a n iu O http://helion.pl/user/opinie7ticsh2 i n t e r n e t y o w

You might also like