You are on page 1of 24

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Wstp do programowania
w jzyku C#
Autor: Adam Boduch
ISBN: 83-246-0523-1
Format: B5, stron: 392
Przykady na ftp: 1421 kB

Zosta profesjonalnym programist C#


C# jest uwaany przez wielu programistw za najlepszy jzyk stosowany do tworzenia
aplikacji dla platformy .NET. Jzyk ten, opracowany w firmie Microsoft, czy w sobie
najbardziej wartociowe cechy C++ i Javy, cis integracj z komponentami .NET,
wysoki poziom bezpieczestwa i ogromne moliwoci. wietnie nadaje si do tworzenia
aplikacji sieciowych i bazodanowych przeznaczonych zarwno dla systemu Windows,
jak i dla urzdze przenonych, takich jak PocketPC. Popularno C# stale ronie,
a nieodpatne udostpnienie przez firm Microsoft rodowiska programistycznego
Visual C# Express Edition sprawio, e coraz wicej twrcw oprogramowania
wykorzystuje je w swojej pracy.
Ksika Wstp do programowania w jzyku C# to podrcznik przeznaczony dla
tych, ktrzy chc pozna ten jzyk od podstaw. Czytajc j, poznasz moliwoci C#
i platformy .NET. Nauczysz si tworzy wasne aplikacje, korzystajc ze rodowiska
Visual C# Express Edition. W ksice znajdziesz omwienie skadni i elementw jzyka
C#, wyjanienie zasad programowania obiektowego i sposobw realizacji rnych
zada programistycznych. Napiszesz aplikacje dla Windows wykorzystujce biblioteki
klas .NET i obsugujce pliki w formacie XML.
Konstrukcja platformy .NET
Skadnia C#
Elementy jzyka
Programowanie obiektowe
Obsuga zdarze
Korzystanie z tablic i kolekcji
Obsuga wyjtkw
Biblioteka Windows Forms
Stosowanie komponentw .NET
Operacje na plikach i strumieniach
Obsuga formatu XML

Spis treci
Przedmowa ..................................................................................... 11
Rozdzia 1. Wprowadzenie ................................................................................ 13
Czym jest programowanie ..............................................................................................13
Mnogo jzykw programowania ...........................................................................14
Edytory kodu ............................................................................................................15
Kompilatory ..............................................................................................................15
Mity zwizane z programowaniem ...........................................................................16
Jzyki programowania ....................................................................................................17
Asembler ..................................................................................................................18
Fortran ......................................................................................................................19
C ...............................................................................................................................19
C++ ...........................................................................................................................19
Perl ...........................................................................................................................20
PHP ...........................................................................................................................20
Turbo Pascal .............................................................................................................20
Java ...........................................................................................................................21
Jzyk maszynowy ...........................................................................................................21
Dziaanie kompilatorw ..................................................................................................22
Tworzenie kodu rdowego ....................................................................................22
Prekompilacja ...........................................................................................................23
Kompilacja do kodu Asemblera ...............................................................................23
Optymalizacja kodu ..................................................................................................23
Asemblacja ...............................................................................................................23
Konsolidacja .............................................................................................................24
Jzyki interpretowane .....................................................................................................24
Jzyk C# .........................................................................................................................24
Instalacja rodowiska ......................................................................................................24
Jak si uczy ...................................................................................................................25
Nie ucz si na pami! ..............................................................................................25
Pocztkowe trudnoci ...............................................................................................25
Pomoc systemowa ....................................................................................................25
Praktyka ....................................................................................................................26
Pierwsza aplikacja ..........................................................................................................26
Kompilacja i uruchamianie .......................................................................................26
Komponenty .............................................................................................................28
Piszemy kod .............................................................................................................29
Zapisywanie projektu ...............................................................................................29
Podsumowanie ................................................................................................................30

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Wstp do programowania w jzyku C#

Rozdzia 2. Podstawy platformy .NET ................................................................ 31


Interfejs programistyczny ...............................................................................................32
API systemu Windows .............................................................................................32
Wizja .NET .....................................................................................................................33
Skadniki platformy .NET ........................................................................................34
Konkluzja .................................................................................................................37
C# a .NET .......................................................................................................................37
Rodzaje aplikacji ............................................................................................................38
Aplikacje konsolowe ................................................................................................38
Windows Forms ........................................................................................................38
Formularze Web Forms ............................................................................................38
Skadniki .NET Framework ............................................................................................39
Usugi sieciowe ...............................................................................................................39
Niezaleno .............................................................................................................40
Uniwersalno ..........................................................................................................40
Podsumowanie ................................................................................................................41

Rozdzia 3. Podstawy jzyka C# ....................................................................... 43


Podstawowa skadnia ......................................................................................................43
Najprostszy program .................................................................................................45
Jak kompilatory czytaj kod .....................................................................................45
Wielko znakw ......................................................................................................45
Program musi posiada metod Main .......................................................................46
rednik koczy instrukcj .........................................................................................46
Program musi posiada klas ....................................................................................47
Wcicia, odstpy ......................................................................................................47
Sowa kluczowe ........................................................................................................47
Symbole ....................................................................................................................47
Komentarze .....................................................................................................................48
Podzespoy, metody, klasy ..............................................................................................49
Funkcje .....................................................................................................................49
Metody .....................................................................................................................50
Klasy .........................................................................................................................50
Przestrzenie nazw .....................................................................................................51
Operator kropki ........................................................................................................51
Sowo kluczowe using ..............................................................................................52
Zmienne ..........................................................................................................................53
Deklarowanie zmiennych .........................................................................................53
Przydzia danych ......................................................................................................54
Typy danych .............................................................................................................55
Restrykcje w nazewnictwie ......................................................................................55
Stae ................................................................................................................................56
Operacje na konsoli ........................................................................................................57
Metody klasy Console ..............................................................................................58
Waciwoci klasy Console ......................................................................................58
Operatory ........................................................................................................................59
Operatory porwnania ..............................................................................................60
Operatory arytmetyczne ...........................................................................................60
Operator inkrementacji oraz dekrementacji ..............................................................61
Operatory logiczne ...................................................................................................62
Operatory bitowe ......................................................................................................62
Operatory przypisania ...............................................................................................63
Inne operatory ...........................................................................................................63

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Spis treci

5
Instrukcje warunkowe .....................................................................................................63
Instrukcja if ...............................................................................................................64
Sowo kluczowe else ................................................................................................68
Instrukcja else if .......................................................................................................69
Instrukcja switch .......................................................................................................70
Ptle ................................................................................................................................73
Ptla while ................................................................................................................73
Ptla do-while ...........................................................................................................75
Ptla for ....................................................................................................................76
Instrukcja break ........................................................................................................77
Instrukcja continue ...................................................................................................78
Operator warunkowy ................................................................................................79
Konwersja danych ..........................................................................................................80
Rzutowanie .....................................................................................................................81
Przykadowa aplikacja ....................................................................................................81
Dyrektywy preprocesora .................................................................................................83
Deklarowanie symboli ..............................................................................................84
Instrukcje warunkowe ...............................................................................................84
Bdy i ostrzeenia ...................................................................................................85
Podsumowanie ................................................................................................................86

Rozdzia 4. Przegld .NET Framework ............................................................... 87


rodowisko CLR ............................................................................................................87
Kod poredni IL ........................................................................................................88
Kod zarzdzany i niezarzdzany ...............................................................................89
Modu zarzdzany ....................................................................................................89
Podzespoy ................................................................................................................90
Dziaanie CLR ..........................................................................................................90
System CTS ....................................................................................................................91
Specyfikacja CLS ...........................................................................................................92
Biblioteka klas ................................................................................................................93
Moduy, przestrzenie nazw .............................................................................................93
Wieloznaczno ........................................................................................................95
Gwne przestrzenie nazw ........................................................................................96
Podsumowanie ................................................................................................................97

Rozdzia 5. Programowanie obiektowe .............................................................. 99


Na czym polega programowanie obiektowe ...................................................................99
Podstawowy kod formularza WinForms .......................................................................101
Modu Form1.Designer.cs ......................................................................................103
Generowanie kodu ..................................................................................................104
Ukrywanie kodu .....................................................................................................105
Programowanie zdarzeniowe ........................................................................................106
Generowanie zdarze .............................................................................................106
Obsuga zdarze .....................................................................................................110
Klasy .............................................................................................................................110
Skadnia klasy .........................................................................................................110
Do czego su klasy ..............................................................................................111
Instancja klasy ........................................................................................................112
Klasy zagniedone ................................................................................................114
Pola ...............................................................................................................................114

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Wstp do programowania w jzyku C#


Metody ..........................................................................................................................115
Zwracana warto ...................................................................................................116
Parametry metod .....................................................................................................116
Przecianie metod .................................................................................................118
Przekazywanie parametrw ....................................................................................119
Dziedziczenie ................................................................................................................122
Klasa domylna ......................................................................................................123
Hermetyzacja ................................................................................................................123
Modyfikatory dostpu ...................................................................................................123
Sekcja private .........................................................................................................124
Sekcja public ..........................................................................................................125
Sekcja protected ......................................................................................................126
Sekcja internal ........................................................................................................127
Konstruktor ................................................................................................................... 127
Pola tylko do odczytu .............................................................................................128
Destruktor .....................................................................................................................129
Waciwoci ..................................................................................................................129
Modyfikatory dostpu .............................................................................................132
Elementy statyczne .......................................................................................................132
Metody statyczne ....................................................................................................133
Klasy statyczne .......................................................................................................134
Polimorfizm ..................................................................................................................135
Ukrywanie elementw klas .....................................................................................135
Sowo kluczowe base ..............................................................................................137
Metody wirtualne ....................................................................................................139
Przedefiniowanie metod .........................................................................................140
Elementy abstrakcyjne ............................................................................................141
Elementy zaplombowane ........................................................................................142
.NET Framework Class Library ....................................................................................142
Przestrzenie nazw ...................................................................................................143
Klasa System.Object ...............................................................................................143
Opakowywanie typw ..................................................................................................145
Interfejsy .......................................................................................................................146
Implementacja wielu interfejsw ............................................................................147
Typy wyliczeniowe .......................................................................................................148
Wartoci elementw ...............................................................................................149
Struktury .......................................................................................................................150
Konstruktory struktur .............................................................................................152
Operatory is i as ............................................................................................................154
Przeadowanie operatorw ............................................................................................155
Sowo kluczowe operator .......................................................................................156
Dzielenie klas ................................................................................................................ 158
Podsumowanie ..............................................................................................................158

Rozdzia 6. Delegaty i zdarzenia ...................................................................... 159


Delegaty ........................................................................................................................159
Tworzenie delegatw ..............................................................................................160
Uycie delegatw ...................................................................................................161
Funkcje zwrotne .....................................................................................................163
Delegaty zoone ....................................................................................................165
Metody anonimowe ................................................................................................165
Zdarzenia ......................................................................................................................166
Podsumowanie ..............................................................................................................169

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Spis treci

Rozdzia 7. Tablice i kolekcje ......................................................................... 171


Czym s tablice .............................................................................................................171
Deklarowanie tablic ......................................................................................................172
Indeks .....................................................................................................................172
Inicjalizacja danych ................................................................................................173
Tablice wielowymiarowe ..............................................................................................173
Ptla foreach .................................................................................................................174
Ptla foreach a tablice wielowymiarowe ................................................................176
Tablice tablic ................................................................................................................ 177
Tablice struktur .............................................................................................................177
Parametr args w metodzie Main() .................................................................................178
Klasa System.Array ......................................................................................................179
Metody klasy ..........................................................................................................180
Sowo kluczowe params .........................................................................................185
Przykad gra kko i krzyyk ...................................................................................186
Zasady gry ..............................................................................................................186
Specyfikacja klasy ..................................................................................................186
Ustawienie symbolu na planszy ..............................................................................190
Sprawdzenie wygranej ............................................................................................191
Interfejs aplikacji ....................................................................................................196
Mechanizm indeksowania .............................................................................................201
Indeksy acuchowe ...............................................................................................203
Kolekcje ........................................................................................................................204
Interfejsy System.Collections .................................................................................204
Stosy .......................................................................................................................206
Kolejki ....................................................................................................................208
Klasa ArrayList ......................................................................................................209
Listy ..............................................................................................................................209
Typy generyczne ....................................................................................................210
Korzystanie z list ....................................................................................................212
Sowniki ........................................................................................................................ 214
Przykadowy program .............................................................................................215
Podsumowanie ..............................................................................................................217

Rozdzia 8. Obsuga wyjtkw ........................................................................ 219


Czym s wyjtki ...........................................................................................................220
Obsuga wyjtkw ........................................................................................................220
Blok finally .............................................................................................................221
Zagniedanie wyjtkw ........................................................................................222
Klasa System.Exception ...............................................................................................223
Selektywna obsuga wyjtkw ...............................................................................223
Wywoywanie wyjtkw ........................................................................................224
Wasne klasy wyjtkw ................................................................................................224
Deklarowanie wasnej klasy ...................................................................................225
Przykadowa aplikacja ............................................................................................226
Przepenienia zmiennych ..............................................................................................229
Podsumowanie ..............................................................................................................230

Rozdzia 9. acuchy w C# ............................................................................. 231


Typ System.String ........................................................................................................231
Unicode w acuchach ............................................................................................232
Niezmienno acuchw .......................................................................................232
Konstruktory klasy .................................................................................................233
Operacje na acuchach ..........................................................................................234

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Wstp do programowania w jzyku C#


acuchy w WinForms .................................................................................................239
Klasa StringBuilder ......................................................................................................241
Metody klasy StringBuilder ....................................................................................242
Zastosowanie klasy StringBuilder ..........................................................................242
Formatowanie acuchw .............................................................................................244
Specyfikatory formatw ...............................................................................................246
Wasne specyfikatory formatowania .......................................................................248
Specyfikatory typw wyliczeniowych ....................................................................249
Typ System.Char ..........................................................................................................250
Podsumowanie ..............................................................................................................251

Rozdzia 10. Biblioteka Windows Forms ............................................................ 253


Podzesp System.Windows.Forms .............................................................................. 253
Okno Object Browser .............................................................................................254
Przestrze System.Windows.Forms ........................................................................ 254
Podstawowe klasy .........................................................................................................255
System.ComponentModel.Component ...................................................................256
System.Windows.Forms.Control ............................................................................256
System.Windows.Forms.Application .....................................................................256
Przykad dziaania .........................................................................................................261
Przygotowanie klasy ...............................................................................................261
Projektowanie interfejsu .........................................................................................261
Rozwizania programistyczne ................................................................................262
Technika przecignij i upu .....................................................................................266
Tworzenie menu ...........................................................................................................270
Waciwoci menu ..................................................................................................271
Ikony dla menu .......................................................................................................271
Skrty klawiaturowe ...............................................................................................274
Menu podrczne .....................................................................................................274
Paski narzdziowe ........................................................................................................275
Pasek statusu ................................................................................................................. 276
Zakadki ........................................................................................................................276
Kontrolki tekstowe ........................................................................................................277
Komponent RichTextBox .......................................................................................280
Okna dialogowe ............................................................................................................281
Waciwoci okien dialogowych ............................................................................282
Aplikacja edytor tekstw ...................................................................................283
Tworzenie nowego formularza .....................................................................................284
Podsumowanie ..............................................................................................................285

Rozdzia 11. Podzespoy .NET ........................................................................... 287


Czym jest COM ............................................................................................................287
Kontrolka w rozumieniu COM ...............................................................................288
Odrobin historii .....................................................................................................288
ActiveX ..................................................................................................................288
DCOM ....................................................................................................................289
Podstawowy podzesp .................................................................................................289
Deasembler .NET ...................................................................................................289
Komponenty .NET ........................................................................................................291
Przygotowanie komponentu w Delphi ....................................................................291
Przygotowanie komponentu C# ..............................................................................293
Zalety stosowania podzespow .............................................................................295
Budowa podzespou ...................................................................................................... 296
Atrybuty podzespou ..................................................................................................... 297

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Spis treci

9
Mechanizm refleksji .....................................................................................................298
Funkcja GetType ....................................................................................................299
Klasa System.Type .................................................................................................300
adowanie podzespou ...........................................................................................301
Przykad dziaania program Reflection ..............................................................301
Wasne atrybuty ......................................................................................................306
Aplikacje .NET Framework SDK .................................................................................311
Global Assembly Cache Tool .................................................................................311
WinCV ...................................................................................................................313
Narzdzie konfiguracji .NET Framework ...............................................................313
PEVerify narzdzie weryfikacji .........................................................................314
.NET a COM .................................................................................................................314
PInvoke .........................................................................................................................316
Uycie funkcji Win32 API .....................................................................................316
Uycie atrybutu DLLImport ...................................................................................318
Podsumowanie ..............................................................................................................319

Rozdzia 12. Pliki i obsuga strumieni ............................................................... 321


Czym s strumienie .......................................................................................................321
Klasy przestrzeni System.IO .........................................................................................322
Operacje na katalogach .................................................................................................322
Tworzenie i usuwanie katalogw ...........................................................................322
Kopiowanie i przenoszenie .....................................................................................323
Odczytywanie informacji o katalogu ......................................................................325
Obsuga plikw .............................................................................................................326
Tworzenie i usuwanie plikw .................................................................................327
Kopiowanie i przenoszenie plikw .........................................................................328
Odczytywanie informacji o pliku ...........................................................................328
Strumienie .....................................................................................................................330
Obsuga plikw tekstowych ....................................................................................330
Operacje na danych binarnych ................................................................................334
Serializacja ....................................................................................................................335
Formaty zapisu danych ...........................................................................................335
Przykad serializacji ................................................................................................336
Podsumowanie ..............................................................................................................337

Rozdzia 13. Obsuga formatu XML ................................................................... 339


Niezaleno XML .......................................................................................................340
XHTML ........................................................................................................................340
Budowa dokumentu ......................................................................................................340
Prolog .....................................................................................................................341
Znaczniki ................................................................................................................341
Atrybuty .................................................................................................................343
Podstawowa terminologia .......................................................................................344
Wze gwny .........................................................................................................345
Komentarze ............................................................................................................345
Przestrzenie nazw ...................................................................................................345
Skadnia przestrzeni nazw ......................................................................................346
Przestrzenie nazw i atrybuty ...................................................................................346
DTD ..............................................................................................................................347
Deklaracja elementu ...............................................................................................347
Deklaracja atrybutu ................................................................................................349
DTD w osobnym pliku ...........................................................................................350
Encje tekstowe ..............................................................................................................350

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

10

Wstp do programowania w jzyku C#


XSD ..............................................................................................................................351
Nagwek XSD .......................................................................................................352
Elementy XSD ........................................................................................................353
Typy danych ...........................................................................................................353
Typy proste .............................................................................................................353
XML a bazy danych ......................................................................................................356
XSL ...............................................................................................................................357
DOM .............................................................................................................................357
SAX ..............................................................................................................................358
Korzystanie z System.XML ..........................................................................................359
adowanie pliku XML ...........................................................................................359
Odczyt dowolnego elementu ..................................................................................360
Odczyt wartoci atrybutw .....................................................................................362
Tworzenie pliku XML ............................................................................................364
Dokumentacja XML .....................................................................................................369
Podsumowanie ..............................................................................................................371

Skorowidz .................................................................................... 373

10

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\_spis treci.doc

Rozdzia 7.

Tablice i kolekcje
Omwilimy ju spor cz tego, co oferuje jzyk C#. Powiedzielimy sobie o najwaniejszym programowaniu obiektowym, ktre moe przysporzy najwicej kopotw pocztkujcemu programicie. Nie zaprezentowaem do tej pory bardzo wanego
elementu wielu jzykw programowania, a mianowicie obsugi tablic.
Jest to bardzo wygodna funkcja jzyka programowania; przekonasz si o tym podczas
pisania przykadowej aplikacji podsumowujcej dotychczasow wiedz o jzyku C#.
Bdzie to znana i lubiana gra kko i krzyyk. O tym jednak pod koniec tego rozdziau. Nie przeduajc, spiesz z wyjanieniem, czym s tablice

Czym s tablice
Wyobra sobie, e w swojej aplikacji musisz przechowa wiele zmiennych tego samego
typu. Dla przykadu, niech bd to dni tygodnia typu string. Proste? Owszem, wystarczy zadeklarowa siedem zmiennych typu string:
string pon, wt, r, czw, pt, so, nd;

Teraz do tych zmiennych naley przypisa warto:


pon = "Poniedziaek";
wt = "Wtorek";
// itd

Teraz wyobra sobie sytuacj, w ktrej musisz zadeklarowa 12 zmiennych oznaczajcych nazwy miesicy. Nieco uciliwe? Owszem. Do tego celu najlepiej uy tablic,
ktre su do grupowania wielu elementw tego samego typu. Osobicie z tablic korzystam bardzo czsto, jest to znakomity, czytelny sposb na przechowywanie duej
iloci danych.
Przejdmy jednak do rzeczy. W C# istnieje moliwo deklaracji zmiennej, ktra przechowywa bdzie wiele danych. Tak w skrcie i uproszczeniu moemy powiedzie
o tablicach.

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

171

172

Wstp do programowania w jzyku C#

Deklarowanie tablic
Tablice deklaruje si podobnie jak zwyke zmienne. Jedyn rnic jest zastosowanie
nawiasw kwadratowych:
typ[] Nazwa;

W miejsce typ naley poda typ danych elementw tablicowych (np. int, string),
a w miejsce nazwa nazw zmiennej tablicowej. Przykadowo:
int[] Foo;

W tym miejscu zadeklarowalimy tablic Foo, ktra moe przechowywa elementy typu
int. Przed uyciem takiej tablicy naley zadeklarowa, z ilu elementw ma si ona
skada. W tym celu korzystamy ze znanego nam operatora new:
Foo = new int[5];

Taka konstrukcja oznacza zadeklarowanie w pamici komputera miejsca dla piciu


elementw tablicy Foo. Przypisywanie danych do poszczeglnych elementw odbywa si
rwnie przy pomocy symboli nawiasw kwadratowych:
int[] Foo;
Foo = new int[5];
Foo[0]
Foo[1]
Foo[2]
Foo[3]
Foo[4]

=
=
=
=
=

100;
1000;
10000;
100000;
1000000;

Console.WriteLine(Foo[4]);

Moliwy jest rwnie skrtowy zapis deklaracji tablic, podobny do tego znanego
z tworzenia obiektw:
int[] Foo = new int[5];

Indeks
Tablica skada si z elementw. Kademu z nich przypisany jest tzw. indeks, dziki
ktremu odwoujemy si do konkretnego elementu tablicy. w indeks ma posta liczby
i wpisujemy go w nawiasach kwadratowych, tak jak to zaprezentowano w poprzednim
przykadzie. Spjrz na kolejny przykad:
char[] Foo = new char[5];
Foo[0]
Foo[1]
Foo[2]
Foo[3]
Foo[4]

172 (06-09-01)

=
=
=
=
=

'H';
'e';
'l';
'l';
'o';

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

173

Indeksy numerowane s od zera do N 1, gdzie N to ilo elementw tablicy. Aby lepiej


to zrozumie, spjrz na tabel 7.1.
Tabela 7.1. Prezentacja zalenoci indeksw elementw
Indeks

Warto

Naley uwaa, aby nie odwoa si do elementu, ktry nie istnieje! Jeeli zadeklarowalimy tablic 5-elementow i odwoujemy si do szstego elementu (poprzez
indeks nr 5), kompilator C# nie zareaguje! Bd zostanie wywietlony dopiero po
uruchomieniu programu.

Inicjalizacja danych
Po utworzeniu tablicy kademu elementowi przypisywana jest domylna warto. Np.
w przypadku typu int jest to cyfra 0. Programista po zadeklarowaniu takiej tablicy ma
moliwo przypisania wartoci dla konkretnego elementu.
Istnieje moliwo przypisania wartoci dla konkretnego elementu ju przy deklarowaniu tablicy. Naley wwczas wypisa wartoci w klamrach:
char[] Foo = new char[5] {'H', 'e', 'l', 'l', 'o'};
Console.WriteLine(Foo[4]);

Jzyk C# dopuszcza uproszczony zapis takiego kodu wystarczy pomin ilo


elementw tablicy:
char[] Foo = {'H', 'e', 'l', 'l', 'o'};

Kompilator oblicza rozmiar takiej tablicy po iloci elementw uporzdkowanych pomidzy klamrami.

Tablice wielowymiarowe
C# umoliwia take deklarowanie tzw. tablic wielowymiarowych. Przykadowo, poniszy kod tworzy tablic 72 (7 kolumn i 2 wiersze):
string[,] Foo = new string[7, 2];

Zasada deklarowania tablic wielowymiarowych jest prosta. W nawiasie kwadratowym


wpisujemy znak przecinka (,), natomiast podczas inicjalizacji musimy poda wymiar
tablicy (ilo elementw naley rwnie rozdzieli znakiem rednika). Podczas przypisywania danych do elementw naley poda dokadny indeks:

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

173

174

Wstp do programowania w jzyku C#


Foo[0,
Foo[1,
Foo[2,
Foo[3,
Foo[4,
Foo[5,
Foo[6,

0]
0]
0]
0]
0]
0]
0]

=
=
=
=
=
=
=

"Pn";
"Wt";
"r";
"Czw";
"Pt";
"So";
"Nd";

Foo[0,
Foo[1,
Foo[2,
Foo[3,
Foo[4,
Foo[5,
Foo[6,

1]
1]
1]
1]
1]
1]
1]

=
=
=
=
=
=
=

"Mon";
"Tue";
"Wed";
"Thu";
"Fri";
"Sat";
"Sun";

Jzyk C# nie ogranicza nas w iloci wymiarw. Moemy wic wprowadzi do naszej
tablicy kolejny wymiar. Poniszy fragment prezentuje deklaracj tablicy 242:
string[, ,] Foo = new string[2, 4, 2];

Inicjalizacja danych tablicy wielowymiarowej jest analogiczna do standardowej tablicy:


int[,] Foo = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

Zauwa jednak, e poszczeglne elementy zawarte w klamrach s rozdzielone znakiem


przecinka. Oczywicie istnieje moliwo skrtowego zapisu:
int[,] Foo = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

lub:
int[,] Foo = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

Ptla foreach
Podczas omawiania zagadnienia ptli nie wspomniaem o jednej wanej ptli sucej
do operowania na tablicach. Poniewa tematyka tablic w rozdziale 3. nie bya omawiania, pragn wspomnie o tej ptli wanie tutaj.
Ptla ta, znana programistom PHP, Perl czy te Delphi, dla .NET jako parametru wymaga tablicy. Spjrz na poniszy fragment kodu:
string[] Foo = new string[7];
Foo[0]
Foo[1]
Foo[2]
Foo[3]
Foo[4]
Foo[5]
Foo[6]

174 (06-09-01)

=
=
=
=
=
=
=

"Pn";
"Wt";
"r";
"Czw";
"Pt";
"So";
"Nd";

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

175

foreach (string Bar in Foo)


{
Console.WriteLine(Bar);
}

Uruchomienie takiej aplikacji spowoduje wywietlenie, jeden pod drugim, kolejnych


elementw tablicy. Po kadej iteracji kolejny element tablicy przypisywany jest do
zmiennej Bar. Tutaj wana uwaga. Zmienna Bar nie moe by zadeklarowana lub uyta
we wczeniejszych fragmentach kodu. Np. ponisza konstrukcja jest bdna:
string Bar = "Test";
foreach (string Bar in Foo)
{
Console.WriteLine(Bar);
}

Przy prbie kompilacji wywietlony zostanie bd: A local variable named 'Bar'
cannot be declared in this scope because it would give a different meaning
to 'Bar', which is already used in a 'parent or current' scope to denote something else.
Identyczny rezultat jak ten pokazany przed chwil mona osign, stosujc ptl for:
for (int i = 0; i < Foo.Length; i++)
{
Console.WriteLine(Foo[i]);
}

Konstrukcja Foo.Length zwraca rozmiar tablicy.

Zasadniczo wygodniejszym i czytelniejszym sposobem jest uycie ptli foreach, ktra


w kocu zostaa stworzona po to, by operowa na tablicach. Jednake uycie ptli for
ma jedn przewag nad foreach mona w niej modyfikowa wartoci elementw.
Spjrz na poniszy przykad:
for (int i = 0; i < Foo.Length; i++)
{
Foo[i] = "Foo";
Console.WriteLine(Foo[i]);
}

Identycznego efektu nie uzyskamy, stosujc ptl foreach:


foreach (string Bar in Foo)
{
Bar = "Foo";
}

W tym momencie kompilator zasygnalizuje bd: Cannot assign to 'Bar' because it


is a 'foreach iteration variable'.

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

175

176

Wstp do programowania w jzyku C#

Ptla foreach a tablice wielowymiarowe


Ptla foreach z powodzeniem dziaa na tablicach wielowymiarowych. W takim wypadku kolejno iteracji jest nastpujca: najpierw przekazana zostanie warto elementu
[0, 1], nastpnie [0, 2] itd. Krtki kod prezentujcy takie dziaanie:
string[,] Foo = new string[7, 2];
Foo[0,
Foo[1,
Foo[2,
Foo[3,
Foo[4,
Foo[5,
Foo[6,

0]
0]
0]
0]
0]
0]
0]

=
=
=
=
=
=
=

"Pn";
"Wt";
"r";
"Czw";
"Pt";
"So";
"Nd";

Foo[0,
Foo[1,
Foo[2,
Foo[3,
Foo[4,
Foo[5,
Foo[6,

1]
1]
1]
1]
1]
1]
1]

=
=
=
=
=
=
=

"Mon";
"Tue";
"Wed";
"Thu";
"Fri";
"Sat";
"Sun";

foreach (string Bar in Foo)


{
Console.WriteLine(Bar);
}

Kolejno wywietlania danych na konsoli bdzie nastpujca:


Pon
Mon
Wt
Tue
...

W przypadku tablic wielowymiarowych konstrukcja Tablica.Length zwraca liczb wszystkich elementw w tablicy. W prezentowanym przykadzie bdzie to 72,
czyli 14.

Dziaanie ptli for na tablicach wielowymiarowych jest nieco inne. Przykadowo,


ponisza ptla spowoduje wywietlenie jedynie polskich dni tygodnia:
for (int i = 0; i < Foo.Length / 2; i++)
{
Console.WriteLine(Foo[i, 0]);
}

176 (06-09-01)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

177

Tablice tablic
Mechanizm tablic jest w jzyku C# bardzo rozbudowany. Umoliwia nawet tworzenie
tablic, ktre zawieraj kolejne tablice. Poniszy kod prezentuje deklaracj takiej tablicy:
int[][] Foo = new int[2][];

Ten zapis oznacza, i tablica Foo zawiera bdzie kolejne dwie tablice o nieokrelonej
jeszcze liczbie elementw. Te dwie kolejne tablice rwnie musz zosta utworzone:
Foo[0] = new int[50];
Foo[1] = new int[1000];

Przypisywanie danych do takich tablic wyglda podobnie jak w przypadku tablic wielowymiarowych:
// przypisanie wartoci do elementu 26. tablicy nr 1
Foo[0][25] = 100;
// przypisanie wartoci do elementu 1000. tablicy drugiej
Foo[1][999] = 1;

Sprawa inicjalizacji tablic prezentuje si podobnie, jak to zostao zaprezentowane


w trakcie omawiania bardziej podstawowych elementw. Przypisanie wartoci do
elementw w tablicach tego typu charakteryzuje si do specyficzn skadni:
int[][] Foo = new int[][]
{
new int[] {1, 2},
// zwr uwag na brak rednika!
new int[] {1, 2, 3}
};
// zwr uwag na obecno rednika!
Console.WriteLine(Foo[0][1]);

Moim zdaniem przejrzystszy jest skrtowy zapis powyszego kodu, rwnie akceptowany przez kompilator C#:
int[][] Foo =
{
new int[] {1, 2},
new int[] {1, 2, 3}
};

Tablice struktur
O strukturach i wyliczeniach powiedzielimy sobie w rozdziale 5. W niektrych przypadkach przydatna okazuje si moliwo deklarowania tablic struktur lub typw wyliczeniowych. Jest to sprawa do prosta, jeeli znasz ju podstawy uycia tablic,
bowiem zamiast typu dotychczas uywanego (czyli int, string, char itp.) naley
uy wczeniej zadeklarowanej struktury:

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

177

178

Wstp do programowania w jzyku C#


public struct Bar
{
public string Name;
public byte Age;
}
class Program
{
static void Main(string[] args)
{
Bar[] BarArr = new Bar[2];
BarArr[0].Name = "Janusz Kowalski";
BarArr[0].Age = 52;
BarArr[1].Name = "Piotr Nowak";
BarArr[1].Age = 18;
}
}

Parametr args w metodzie Main()


Gdy w rozdziale trzecim omawiaem podstawowe elementy programu C#, wspomniaem oczywicie o metodzie Main(), lecz pominem znaczenie parametru args. Zrobiem to celowo, aby nie wprowadza zamtu, gdy tematyka tablic czy nawet typw
danych nie bya wwczas poruszana. Parametr args typu tablicowego zawiera ewentualne parametry przekazane do naszej aplikacji z linii polece. Czyli uruchamiajc
program z poziomu linii komend, mog napisa:
MojaAplikacja.exe Parametr1 Parametr2

Zarwno Parametr1, jak i Parametr2 zostan przekazane do aplikacji, kady zostanie


przypisany do odrbnego elementu tablicy. Napiszmy dla treningu prosty program.
Jego zadanie bdzie banalne: sortowanie argumentw przekazanych do programu.
Waciwie najtrudniejsz rzecz w programie jest sama konwersja danych z acucha
string na warto cakowit int. Samo sortowanie tablicy realizuje metoda Sort()
klasy Array. Cao programu prezentuje listing 7.1.
Listing 7.1. Pobieranie i sortowanie argumentw programu
using System;
namespace FooConsole
{
class Program
{
static void Main(string[] args)
{

178 (06-09-01)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

179

if (args.Length == 0)
{
Console.WriteLine("Brak argumentw programu!");
return;
}
int[] ArrInt = new int[args.Length];
int count = 0;
foreach (string element in args)
{
ArrInt[count] = Int32.Parse(element);
++count;
}
Array.Sort(ArrInt);
for (int i = 0; i < ArrInt.Length; i++)
{
Console.WriteLine("{0} ", ArrInt[i]);
}
}
}
}

Argumenty przekazane do aplikacji konwertujemy, a nastpnie zapisujemy w nowo


utworzonej tablicy ArrInt. Zwr uwag, e do konwersji danych ze string na int
uyem metody Parse() z klasy Int32. To rwnie jest dopuszczalny sposb, rwnie
dobrze mogem take uy klasy Convert.
Posortowan tablic prezentuj na konsoli, wywietlajc w ptli kolejne jej elementy.
Element {0} wykorzystany w acuchu w metodzie WriteLine() zostanie zastpiony
wartoci zmiennej przekazanej w tej samej metodzie. Jest to czytelny i prosty
sposb formatowania acuchw np.:
string sName = "Adam";
string sLocation = "Wrocawiu";
Console.WriteLine("Mam na imi {0} i mieszkam we {1}", sName,

sLocation);

Klasa System.Array
Chyba oswoie si ju z myl, e cae rodowisko .NET oparte jest na klasach, strukturach i wyliczeniach? Nie inaczej jest w przypadku tablic. Kada tablica w jzyku C#
dziedziczy po klasie System.Array, ktra dostarcza podstawowych mechanizmw do
manipulacji na elementach tablicy. To dziki metodom tej klasy moemy pobra ilo
elementw w tablicy, posortowa j czy przeszuka. Kilka najbliszych stron zostanie
przeznaczonych na opisanie podstawowych elementw tej klasy.

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

179

180

Wstp do programowania w jzyku C#

Jeeli chodzi o waciwoci klasy, to najwaniejsz jest Length, ktra zwraca aktualn
liczb elementw tablicy. Ta sama klasa udostpnia rwnie waciwo LongLength,
ktra zwraca 64-bitow warto okrelajc rozmiar wszystkich elementw w przypadku tablic wielowymiarowych.
Warto rwnie wspomnie o waciwoci Rank, ktra zwraca liczb wymiarw danej
tablicy:
int[,] Foo = new int[3, 2] { { 1, 2 }, { 1, 2 }, { 1, 2 } };
Console.WriteLine(Foo.Rank);

// tablica dwuwymiarowa (wywietli 2)

Metody klasy
W trakcie omawiania klasy System.Array naley wspomnie o paru metodach, ktre
mog Ci si przyda przy okazji operowania na tablicach.

BinarySearch()
Uywajc algorytmu przeszukiwania binarnego, przegldam elementy tablicy, aby znale dan warto. Pierwszym parametrem tej metody musi by nazwa tablicy, na
ktrej bdzie ona operowa. Drugim parametrem szukany element. Oto przykad
uycia tej metody:
string[] Foo = new string[] { "Pn", "Wt", "r", "Czw", "Pt" };
Console.WriteLine(Array.BinarySearch(Foo, "r"));

Metoda zwraca numer indeksu, pod jakim znajduje si szukany element, lub 1, jeeli
nic nie zostao znalezione. W zaprezentowanym przykadzie metoda zwrci warto 2.

Clear()
Metoda umoliwia wyczyszczenie tablicy. W rzeczywistoci ustawia kademu elementowi warto 0 lub null w zalenoci od jego typu. Metoda przyjmuje trzy parametry.
Pierwszym jest nazwa tablicy, drugim numer indeksu, od ktrego ma rozpocz
czyszczenie, a trzecim zasig tego procesu. Dziki metodzie Clear() mona bowiem
wyczyci okrelone elementy z tablicy. Poniszy przykad prezentuje czyszczenie
caej zawartoci:
Array.Clear(Foo, 0, Foo.Length);

Metoda Clear() nie zmienia rozmiaru czyszczonej tablicy. Jeeli czycimy tablic,
ktra ma powiedzmy 5 elementw, to po przeprowadzeniu tej operacji nadal
bdzie ich miaa tyle samo.

Do elementw wyczyszczonej tablicy ponownie moemy przypisywa jakie wartoci.

180 (06-09-01)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

181

Sowo kluczowe null w jzyku C# oznacza warto pust.

Clone()
Metoda Clone() zwraca kopi tablicy, z ktrej zostaa wywoana np.:
Bar = Foo.Clone();

Od tej pory Bar bdzie posiadaa takie same elementy co Foo. Poniewa metoda Clone()
zwraca dane w postaci typu object, naley dokona rzutowania na waciwy typ. Tzn.
jeeli mamy tablic typu string, naley na niego dokona odpowiedniego rzutowania,
co prezentuje poniszy przykad:
string[] Foo = new string[] { "Pn", "Wt", "r", "Czw", "Pt" };
// tworzenie kopii
string[] Bar = (string[])Foo.Clone();
foreach (string element in Bar)
{
Console.WriteLine(element);
}

Copy()
By moe lepszym sposobem na utworzenie kopii tablicy bdzie zastosowanie metody
Copy(). Umoliwia ona dodatkowo okrelenie rozmiarw kopiowania, tj. ile elementw
zostanie skopiowanych. Oto przykad:
string[] Foo = new string[] { "Pn", "Wt", "r", "Czw", "Pt" };
string[] Bar = new string[Foo.Length];
// tworzenie kopii
Array.Copy(Foo, Bar, Foo.Length);

Pierwszym parametrem tej metody musi by tablica rdowa (kopiowana), drugim


tablica, do ktrej skopiowane zostan elementy. Trzeci parametr to oczywicie
ilo kopiowanych elementw.

Find()
Metoda umoliwia przeszukanie caej tablicy w celu znalezienia danego elementu. Kwalifikacja danego elementu jako znaleziony lub te nie odbywa si przy pomocy zewntrznej metody. Oto przykadowy program:
{
Point[]
new
new
new
};

points = {
Point(10, 20),
Point(100, 200),
Point(400, 500)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

181

182

Wstp do programowania w jzyku C#


Point first = Array.Find(points, pointFind);
Console.WriteLine("Found: {0}, {1}", first.X, first.Y);
Console.Read();
}
private static bool pointFind(Point point)
{
if (point.X % 2 == 0)
{
return true;
}
else
{
return false;
}
}

Na samym pocztku zadeklarowaem tablic struktur Point, ktre bd przeszukiwane. Program wyszukuje elementw tablicy, w ktrej element X struktury Point jest
liczb parzyst. Po znalezieniu pierwszego metoda pointFind() zwraca true i koczy
swe dziaanie.
Struktura Point zadeklarowana jest w przestrzeni nazw System.Drawing. Nie zapomnij zadeklarowa jej uycia przy pomocy sowa using oraz doczy odpowiedniego
podzespou (System.Drawing.dll).

FindAll()
Jak sama nazwa wskazuje, metoda FindAll() wyszukuje wszystkie elementy, ktre
speniaj dane kryteria poszukiwa. Oto jak powinien wyglda program z poprzedniego
listingu, jeli ma wyszukiwa wszystkie elementy:
static void
{
Point[]
new
new
new
};

Main(string[] args)
points = {
Point(10, 20),
Point(100, 200),
Point(400, 500)

Point[] find = Array.FindAll(points, pointFind);


foreach (Point element in find)
{
Console.WriteLine("Found: {0}, {1}", element.X, element.Y);
}
Console.Read();
}

182 (06-09-01)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

183

private static bool pointFind(Point point)


{
if (point.X % 2 == 0)
{
return true;
}
else
{
return false;
}
}

FindLast()
Metoda ta dziaa podobnie jak Find(). Jedyna rnica jest taka, e FindLast() szuka
ostatniego wystpienia danego elementu; nie koczy pracy, gdy znajdzie pierwszy
element pasujcy do kryteriw.

GetLength()
Zwraca ilo elementw w tablicy. Umoliwia dziaanie na tablicach wielowymiarowych.
W parametrze tej metody naley poda numer wymiaru, ktrego ilo elementw ma
by pobrana. Jeeli mamy do czynienia z tablic jednowymiarow, w parametrze wypisujemy cyfr 0.
Klasa System.Array udostpnia rwnie metod GetLongLength(), ktra dziaa analogicznie do GetLength(), z t rnic, i zwraca dane w postaci liczby typu long.

GetLowerBund(), GetUpperBund()
Metoda GetLowerBund() zwraca numer najmniejszego indeksu w tablicy. W przewaajcej czci przypadkw bdzie to po prostu cyfra 0. Metoda GetUpperBund() zwraca
natomiast najwikszy indeks danej tablicy. Obie metody mog dziaa na tablicach
wielowymiarowych; wwczas naley w parametrze poda indeks wymiaru. Przykadowe uycie:
int[] Foo = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine("Najmniejszy indeks: {0}, najwikszy: {1}",
Foo.GetLowerBound(0), Foo.GetUpperBound(0));

GetValue()
Prawdopodobnie nie bdziesz zmuszony do czstego korzystania z tej metody, zwraca
ona bowiem warto danego elementu tablicy. W parametrze tej metody musisz poda
indeks elementu, tak wic jej dziaanie jest rwnoznaczne z konstrukcj:
Tablica[1];

// zwraca element znajdujcy si pod indeksem 1

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

183

184

Wstp do programowania w jzyku C#

Chcc wykorzysta t metod, kod moemy zapisa nastpujco:


int[] Foo = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(Foo.GetValue(1));

Initialize()
We wczeniejszych fragmentach tego rozdziau pisaem o inicjalizacji tablicy. Metoda
Initialize() moe to uatwi. Jej uycie powoduje przypisanie kademu elementowi
pustej wartoci (czyli moe to by cyfra 0 lub np. warto null). Jej uycie jest bardzo
proste, nie wymaga podawania adnych argumentw:
Foo.Initialize();

IndexOf()
Przydatna metoda. Zwraca numer indeksu na podstawie podanej wartoci elementu.
Przykad uycia:
string[] Foo = { "Pn", "Wt", "r", "Czw", "Pt", "So", "Nd" };
Console.WriteLine(Array.IndexOf(Foo, "Pt"));

W powyszym przykadzie na konsoli zostanie wywietlona cyfra 4, gdy pod tym numerem kryje si element Pt.

Resize()
Metoda Resize() przydaje si wwczas, gdy musimy zmieni rozmiar danej tablicy.
W pierwszym jej parametrze musimy poda nazw tablicy poprzedzon sowem kluczowym ref oznaczajcym referencj. Drugim parametrem musi by nowy rozmiar tablicy:
string[] Foo = { "Pn", "Wt", "r", "Czw", "Pt", "So", "Nd" };
Array.Resize(ref Foo, Foo.Length + 5);

SetValue()
Metoda SetValue() umoliwia nadanie wartoci dla danego elementu tablicy. Prawdopodobnie nie bdziesz korzysta z niej zbyt czsto, gdy to samo dziaanie mona zrealizowa przy pomocy operatora przypisania. Gdyby jednak mia wtpliwoci, co do
jej uycia, poniej prezentuj przykad:
Foo.SetValue("Weekend", 9);

Taki zapis oznacza przypisanie wartoci Weekend pod indeks nr 9.

184 (06-09-01)

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

Rozdzia 7. Tablice i kolekcje

185

Sowo kluczowe params


Mechanizm tablic jzyka C# nie umoliwia tworzenia tablic dynamicznych, tj. o zmiennym rozmiarze. Zmiana rozmiaru tablic (iloci elementw) jest nieco problematyczna,
podobnie jak usuwanie elementw. Warto jednak wspomnie o sowie kluczowym params, uywanym w poczeniu z tablicami. Konkretnie z tablicowymi parametrami metod:
static void Foo(params string[] args)
{
}

Sowo params, ktre poprzedza waciw deklaracj parametru, mwi o tym, i liczba
elementw przekazywanych do metody bdzie zmienna. Oto przykad takiego programu:
using System;
namespace FooApp
{
class Program
{
static void Foo(params string[] args)
{
for (int i = 0; i < args.Length; i++)
{
Console.Write(args[i] + " ");
}
Console.WriteLine();
}
static void Main(string[] args)
{
Foo("Adam", "Paulina");
Foo("Adam", "Paulina", "Marta");
Console.Read();
}
}
}

Jak widzisz, moliwe jest przekazanie dowolnej liczby parametrw do metody Foo().
Kady parametr bdzie kolejnym elementem tablicy i jest to przydatna cecha jzyka C#.
Moliwe jest przekazywanie parametrw rnego typu. Nagwek metody musi wyglda wwczas tak:
static void Foo(params object[] args)

Tak metod mona wywoa np. tak:


Foo("Adam", 10, 12.2);

S:\ Sylwia\pdf\Wstep do programownia w jezyku C#\07.doc

(06-09-01)

185

You might also like