Professional Documents
Culture Documents
Zarwno w Internecie, jak i wrd dostpnych ksiek na rynku, mao jest pozycji, ktre skierowane s do
pocztkujcych programistw - pocztkujcych w prawdziwym tego sowa znaczeniu. Moim celem byo napisanie
kursu jzyka C# skierowanego wanie do takich osb. Zadanie z pocztku wydawao si proste, jednak z
upywem czasu zauwayem, e chyba atwiej pisze si o rzeczach bardziej zaawansowanych. Wiele razy apaem
si na tym, e nie tumaczyem podstawowych poj potrzebnych do zrozumienia danego zagadnienia jednak
chyba za duo przebywam w towarzystwie innych programistw i komputerw J . Mam nadzieje, e uda mi si
przekaza minimum wiedzy potrzebne do rozpoczcia samodzielnej przygody z programowaniem. Ze wzgldu na
ograniczon objto kursu, a zarazem prb jak najdokadniejszego tumaczenia podstaw programowania, wiele
wanych aspektw zostanie pominitych. W przypadku trudnoci w zrozumieniu niektrych czci, bd
ewentualnych bdw zachcam do udzielania si na forum CentrumXP.pl. Postaram si na bieco
wprowadza poprawki.
Algorytm
Algorytm to sposb na osignicie jakiego celu. Program komputerowy realizuje zawsze jaki algorytm. W
uproszczeniu program komputerowy skada si z danych oraz instrukcji, ktre na tych danych operuj. My take
co chwila wykonujemy jaki algorytm. Przykadem moe by gotowanie obiadu:
Cel:
Dane:
gotowy obiad
skadniki
Instrukcje: - we skadniki
- obierz ziemniaki
- pokrj miso
-
Wynik:
gotowa potrawa
Co prawda tego za nas program komputerowy nie zrobi (moe w przyszoci J ), ale inne zadania jak najbardziej.
Cel:
Dane:
oblicz wynik
7i8
Instrukcje: dodaj
Wynik:
15
Program, ktry realizuje takie zadanie bdzie wyglda w wikszoci jzykw podobnie, dlatego posu si
kodem uoglnionym (nie napisanym w konkretnym jzyku) tzw. pseudokodem. Program komputerowy
wykonuje instrukcje w kolejnoci takiej samej jak by czyta tekst, czyli od gry do dou i od lewej do prawej
strony.
Dodaj
{
Zwr 7 + 8
}
Dodaj
Powyej mamy instrukcje: Dodaj, Zwr , +, oraz dane: 7 i 8. Pierwsze 4 linijki to definicja instrukcji
Dodaj.
Czym jest definicja?
Zacznijmy od tego, e jzyk programowania oprcz swek podstawowych, takich jak np. Zwr, pozwala nam
definiowa wasne instrukcje skadajce si z podstawowych. Mona by to porwna do tworzenia nowych
wyrazw w jakim jzyku. Moe wanie tak powstao sowo gotowa J Zamiast wypowiada ca sekwencj
zda:
Obierz ziemniaki,
Wlej wod do garnka,
Posl wod
Wystarczy, e powiemy Ugotuj ziemniaki. Tak samo w C# moemy ze swek podstawowych stworzy now
instrukcj. Tak wic definiujc instrukcj Dodaj moemy jej pniej uy wielokrotnie (robimy to w linijce
pitej), tak samo jak instrukcji podstawowych.
Zmienne
Aby nasze programy byy uniwersalne musimy zapewni im interakcj z uytkownikiem, czyli moliwo
komunikacji. Przykad:
Cel:
Dane:
X+Y
Poniej znajduje si program w pseudokodzie, ktry najpierw definiuje now instrukcj dodajc dwie liczby, a
nastpnie pobiera dane od uytkownika i je dodaje.
Dodaj(zmienna1, zmienna2)
{
Zwr zmienna1 + zmienna2
}
X = Pobierz liczb
Y = Pobierz liczb
Dodaj(X, Y)
X oraz Y to zmienne, czyli pojemniki na dane. Dane mona do nich wkada, wyjmowa lub podmienia. W
definicji instrukcji Dodaj okrelamy, e bdziemy podawa jej dwie zmienne (zmienna1 oraz zmienna2), a
nastpnie zwracali ich sum. Zmienne podawane jako dane wejciowe dla instrukcji nazywaj si parametrami i w
przypadku mnogiej ich iloci rozdzielane s przecinkami. Nastpnie do zmiennej X wkadamy liczb pobran od
uytkownika. To samo robimy ze zmienna Y. Na koniec nakazujemy instrukcji Dodaj doda zawartoci
zmiennych X oraz Y. Wracajc do swka gotowa, moemy sobie wyobrazi, e te otrzymuje dwie zmienne:
co ugotowa,
jak ilo.
Gotuj(co, jak)
{
Obierz co,
Wlej wod do garnka,
Gotuj(zmienna_potrawa, zmienna_ilo)
Jak pewnie kady zauway nazwy zmiennych s rne. W C#, trzymajc si kilku zasad, zmienne moemy
praktycznie nazywa dowolnie.
Prawdziwy program w C#
using System;
namespace PierwszyProgram {
class NaszaKlasa
{
static int Dodaj(int zmienna1, int zmienna2)
{
return zmienna1 + zmienna2;
}
static void Main(string[] args)
{
string x = Console.ReadLine();
string y = Console.ReadLine();
int wynik = Dodaj(int.Parse(x), int.Parse(y));
Console.WriteLine(wynik);
}
}
}
Niestety nie wyglda tak prosto jak pseudokod ale mam nadziej, e niedugo wszystko si wyjani (w kocu to
dopiero pierwsza cz z dwudziestu). W tej chwili wystarczy jak wychwycimy kilka instrukcji, ktre odpowiadaj
tym z pseudokodu.
Definicja instrukcji:
int x = Convert.ToInt32(Console.ReadLine());
int y = Convert.ToInt32(Console.ReadLine());
Pobranie danych do zmiennej wynik. Danymi jest wynik dziaania instrukcji Dodaj.
Console.WriteLine(wynik);
W miar postpw czynionych podczas nauki stopniowo wszystko powinno stawa si zrozumiae.
Obiekty a programowanie
Gdy prbujemy opisa jaki obiekt z otaczajcej nas rzeczywistoci trudno nam wymieni jego wszystkie cechy. W
zasadzie jest to niemoliwe. Programujc, nie moemy sobie na to pozwoli, tak wic obiekty w naszych
programach musz by cile zdefiniowane. Musimy wiedzie z jakich cech si skadaj i jakie wartoci maj te
cechy, dlatego naley zdecydowa si jakie cechy s wane i umieci je w definicji klasy. Pozostae cechy naley
odrzuci
Zdefiniujmy wic klas Dom:
Cechy: - kolor cian
- kolor dachu
- drzwi
- okno
Tyle nam wystarczy, a wic sami decydujemy jak dokadnego opisu nam potrzeba. Definicja klas powinna by
adekwatna do celu jaki chcemy osign, np. jeli w naszym programie bdziemy musieli rozrnia obiekty klasy
Dom po kolorze cian, to tylko ta cecha nam wystarczy, pozostae bd zbdne.
Zdefiniujmy obiekt klasy Dom:
Dom Jasia
Kolor cian:
biay
drzwi Jasia
Okno:
okno mae
Kolory to proste typy, ktre nie s obiektami. Jednak drzwi i okna to te obiekty, a wic potrzeba nam definicji
klas: Drzwi oraz Okno.
Drzwi
Cechy: - materia
- kolor
- stan
Okno
Cechy: - szeroko
- wysoko
- stan
A nastpnie obiekty:
Drzwi Jasia
Materia:
drewno
Kolor:
brzowy
Stan:
zamknite
Okno mae
Szeroko: 0.5 metra
Wysoko: 1 metr
Stan:
zamknite
Cechy moemy utosamia ze zmiennymi w programowaniu (w klasie s to tzw. pola). Dodatkowo obiekt moe
wykonywa ustalone czynnoci, np. drzwi i okna mog si otwiera. Moemy take zaoy, e dom potrafi
zmienia swj kolor. Funkcje te nazywamy metodami.
Ostateczne definicje klas wygldaj nastpujco:
Dom
Pola:
- kolor cian
- kolor dachu
- drzwi
- okno
- materia
- kolor
- stan
Metody: - zamknij
- otwrz
Okno
Cechy:
- szeroko
- wysoko
- stan
Metody: - zamknij
- otwrz
class Drzwi
{
public string Material;
public string Kolor;
public string Stan;
public void Otworz()
{
Stan = "Otwarte";
}
public void Zamknij()
{
Stan = "Zamknite";
}
}
class Okno
{
public double Szerokosc;
public double Wysokosc;
public string Stan;
public void Otworz()
{
Stan = "Otwarte";
}
public void Zamknij()
{
Stan = "Zamknite";
}
}
class Dom
{
public
public
public
public
string KolorScian;
string KolorDachu;
Drzwi DrzwiDomu;
Okno OknoDomu;
class KlasaGlowna
{
static void Main()
{
Drzwi drzwiJasia = new Drzwi();
drzwiJasia.Kolor = "brzowy";
drzwiJasia.Material = "drewno";
drzwiJasia.Stan = "zamknite";
Okno oknoJasia = new Okno();
oknoJasia.Szerokosc = 0.5;
oknoJasia.Wysokosc = 1;
oknoJasia.Stan = "zamknite";
Dom domJasia = new Dom();
domJasia.DrzwiDomu = drzwiJasia;
domJasia.OknoDomu = oknoJasia;
domJasia.KolorScian = "biay";
domJasia.KolorDachu = "czarny";
}
}
Ile to kosztuje?
Kto kiedy powiedzia, e nie ma nic za darmo. By moe jest to prawda, ale fakt jest taki, e za C# 2005
Express Edition nie musimy NIC paci! Uywa za darmo moemy tego rodowiska a do 6 listopada 2006 roku.
Przez tak dugi okres czasu nie tylko moemy doskonale pozna to narzdzie i nauczy si programowa, ale
rwnie z jego pomoc stworzy bardzo ciekawe aplikacje.
W dalszej czci kursu nie bd uywa penej nazwy Visual C# 2005 Express Edition lecz Visual C#.
Wymagania systemowe
Oprcz Visual C# potrzebujemy .NET Framework w wersji 2.0. Jest to pakiet zawierajcy potrzebne biblioteki i
rodowisko uruchomieniowe do uruchamiania aplikacji napisanych za pomoc Visual C#. Musimy zda sobie
spraw z tego, e Visual C# to narzdzie pomagajce nam pisa aplikacje .NETowe, ale to .NET jest sercem
aplikacji, ktre bdziemy pisa. Rwnie dobrze moglibymy napisa nasz program w notatniku, zapisa go do
pliku tekstowego i skompilowa go kompilatorem korzystajc z linii polece.
Wymagania:
Konfiguracja minimalna:
Procesor
System operacyjny
Konfiguracja rekomendowana:
Konfiguracja minimalna:
128 MB
Pami RAM
Konfiguracja rekomendowana:
256 MB
Visual C#:
.NET Framework:
Twardy dysk
Opcjonalnie: Z MSDN Express:
Minimalna:
Rozdzielczo monitora
Rekomendowana:
Instalacja
Program moemy cign ze stronyhttp://www.centrumxp.pl/download/update/update.php?id=996 ,
a nastpnie zainstalowa na naszym komputerze. Plik zawierajcy instalk Visual C# 2005 Express Edition
to vcssetup.exe.
Aby rozpocz instalacj musimy by podczeni do Internetu, poniewa waciwe pliki instalacyjne bd cigane
w trakcie instalacji. Po rozpoczciu powinno pojawi si okno
W przypadku gdy w naszym systemie operacyjnym nie ma zainstalowanych wymaganych skadnikw, powysze
okno moe si nie pojawi, a zamiast niego ujrzymy informacj co naley zainstalowa i jak to zrobi.
Gdy wszystko bdzie ju jak naley i powysze okno pojawi si przed naszymi oczami, klikamy Next.
Po przeczytaniu warunkw licencji, zaznaczamy checkbox akceptujcy te warunki, a nastpnie klikamy Next.
MSDN 2005 Express Edition to pomoc, ktra integruje si z Visual C#. Moemy w niej znale opis bibliotek
jzyka C# oraz duo przykadw uycia klas. Jeli posiadamy szybkie cze internetowe i nie jest problemem dla
nas cignicie 248 MB danych, to warto MSDN zainstalowa.
SQL Server 2005 Express Edition x86 to okrojony system baz danych. W naszym kursie nie bdziemy z niego
korzysta, tak wic ja pomin go przy instalacji.
Po klikniciu Next przechodzimy do nastpnego okna.
Wybieramy miejsce, gdzie na dysku chcemy zainstalowa Visual Studio, a nastpnie klikamy Next.
Po skoczonej instalacji moemy dokona aktualizacji systemu oraz rejestracji Visual C# 2005 Express Editio
przez Internet. Jeli nie zarejestrujemy produktu przez 30 dni, to stracimy moliwo korzystania z niego.
Po udanej instalacji moemy uruchomi Visual C#
Start -> Programy -> Visual C# 2005 Express Edition
Nadszed wic czas zapoznania si ze rodowiskiem, jednak uczynimy to w nastpnej czci kursu.
Solution i Projekty
Aplikacje w .NET tworzone s w ramach project, czyli projektu. W zasadzie projekt jest to pojedynczy program.
Jednak nie jest to element znajdujcy si najwyej w hierarchii, ktra istnieje w .NET 2.0. Elementem takim jest
solution (niestety, nie mam pojcia jak przetumaczy to sowo na jzyk polski, aby miao sens, a w takich
wypadkach wyznaj zasad, e naley pozostawi oryginaln wersj J ). Solution to jakby najwiksza paczka, w
ktrej znajduje si nasz program, a wic jeden lub wicej projektw. Solution moemy utosamia z systemem
informatycznym, czyli nie pojedyncz aplikacj, ale wiksz ich iloci. W naszym przypadku bd to systemiki.
Stwrzmy wic pierwszy projekt.
Nastpnie musimy wybra typ projektu spord 6 typw. Poniewa w tym kursie skupiamy si tylko na nauce
jzyka C#, bdziemy tworzy tylko aplikacje konsolowe (Console Application). Musimy take nada nazw dla
naszego projektu. Na obrazku powyej jest to MojaPierwszaAplikacja.
Powyszy obrazek przedstawia nam okno, z ktrym bdziemy mieli najwicej do czynienia, czyli edytor Visual
C# Editor.
Edytor skada si z wielu zakadek, ktre moemy dowolnie chowa bd rozwija i zwija.
Jeli klikniemy znaczek X, znajdujcy si na kadej zakadce w prawym grnym rogu, to dana zakadka zostanie
zamknita. Aby ponownie otworzy zakadk, korzystamy z menu View.
Jeli na ekranie mamy otworzonych duo zakadek, nasze rodowisko moe przesta by wygodne w
uytkowaniu. Sytuacja taka przedstawiona jest na obrazku poniej.
W takiej sytuacji zakadka z kodem rdowym jest za maych rozmiarw, i pisanie programu moe sta si
bardzo niewygodne. Z pomoc przychodzi nam zwijanie/rozwijanie zakadek. Obok przycisku X znajduje si
przycisk z ikon przedstawiajc pinesk. Klikajc go, moemy zwija i rozwija zakadki.
Najedajc na pasek tytuowy zakadki, a nastpnie wciskajc lewy klawisz myszki, moemy dowolnie przesuwa
zakadk. W ten sposb jestemy w stanie dowolnie rozmieci zakadki na ekranie.
Gwne zakadki
Edytor
Najwaniejsz dla nas zakadk jest zakadka edytora tekstowego, w ktrym bdziemy pisa kod programu.
Wywietla on zawarto plikw tekstowych. Zazwyczaj bdzie to kod rdowy naszych programw. Program.cs
to plik stworzony automatycznie przez Visual C#. Dodatkowo zawiera on w sobie troch kodu, ktry moemy
wykorzysta bd usun. Visual C# w zalenoci, jaki typ projektu wybierzemy, automatycznie generuje troch
typowego kodu.
Solution Explorer
Do nawigacji po strukturze naszego projektu, czyli jednoczenie po plikach, suy zakadka Solution Explorer.
Za pomoc Solution Explorer moemy dodawa nowe projekty do solution, dodawa oraz usuwa pliki,
nawigowa po strukturze i wybiera pliki, ktrych zawarto chcemy wywietli.
Dla przykadu dodajmy nowy plik zawierajcy definicj klasy.
Mimo, e nic jeszcze nie napisalimy, to Visual C# zrobi to za nas. Jak przekonamy si w przyszoci, jest to
jedno z udogodnie oferowanych przez to rodowisko. W tym przypadku wygenerowao dla nas szkielet klasy,
czyli fragment kodu wystpujcy w kadej definicji klasy.
Teraz moemy zamkn Visual C# bez obawy, e utracimy napisany przez nas program.
Wczmy rodowisko ponownie, a nastpnie otwrzmy nasz projekt. Moemy to zrobi poprzez menu, w ktrym
zapamitane s ostatnio edytowane projekty.
Do dziea!
Nazwijmy go Magazyn.
Visual C# zapyta si nas nie tylko, czy chcemy zmieni nazw pliku, ale take o nazwy elementw zwizanych z
tym plikiem.
Wybierzmy Yes. Dziki temu ,w naszym kodzie, klasa Program i wszystkie uycia jej nazwy, zastpione
zostan nazw Magazyn. Zazwyczaj pliki z rozszerzeniem *.cs zawieraj klas o takiej samej nazwie jak nazwa
pliku. Powinnimy trzyma si tej zasady i stara si, eby w jednym pliku znajdowaa si definicja jednej klasy.
W tej chwili okno edytora zawiera nastpujcy kod rdowy.
Jeli chcielibymy napisa nasz program, to klasa Magazyn posuyaby jako gwna klasa aplikacji, a klasa
InterfejsUzytkownika definiowaaby sposb komunikacji z uytkownikiem (komunikatu, menu uytkownika itp.).
Dodatkowo potrzebowalibymy projektu, w ktrym wykonywane byoby zarzdzanie magazynem, czyli zawieraby
logik naszego systemu oraz projektu, ktry pobieraby dane z bazy danych (najprostsz baz danych mog by
pliki tekstowe). Dla przykadu stwrzmy jeden z tych projektw. Najpierw zapisujemy to co do tej pory zrobilimy
Save All a nastpnie postpujemy jak na obrazku poniej.
W tej chwili mamy w jednym solution dwa projekty. W tym kursie raczej nie bdziemy pisa takich aplikacji,
poniewa skupimy si na samym jzyku C#, a nie na architekturze aplikacji, ale warto wiedzie, jak tego typu
rzeczy mona zrobi.
Mimo, e obydwa projekty znajduj si w jednym solution, to na razie nie moemy ich ze sob powiza, czyli z
poziomu jednego projektu uywa drugiego. Moemy to osign dodajc tzw. referencj (wskazanie na inny
projekt) do projektu. Zobrazujmy to dodajc do projektu Magazyn referencje do projektu ZarzadcaMagazynu.
Nastpnie wybieramy zakadk Project (zawiera projekty znajdujce si w solution) i dodajemy projekt
ZarzadcaMagazynu.
Po dodaniu referencji, moemy w kodzie klas znajdujcych si w projekcie Magazyn uywa klas z projektu
ZarzadcaMagazynu.
Projekty s rnego rodzaju. Mog to by np. dynamiczna strona internetowa wykonana w technologii ASP.NET,
okienkowa aplikacja Windowsowa czy te aplikacja konsolowa (dziaajca w trybie tekstowym brak grafiki,
jedynie znaki alfanumeryczne). W tym kursie skupimy si na aplikacjach konsolowych, poniewa wietne nadaj
si do nauki podstaw jzyka C#.
Uruchamianie aplikacji
Mimo, e nie napisalimy systemu obsugujcego magazyn, to jednak chciabym ju teraz pokaza jak moemy
uruchamia pisane przez nas aplikacje.
using System;
using System.Collections.Generic;
using System.Text;
namespace Magazyn
{
class Magazyn
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello world.");
System.Console.Read();
}
}
}
Instrukcja
System.Console.WriteLine("Hello world.");
Wypisze na ekranie napis Hello world., a instrukcja
System.Console.Read();
Bdzie czeka na nacinicie przez nas jakiego klawisza (bez tej instrukcji program skoczyby swoje dziaanie
zaraz po wypisaniu Hello Word.).
Uruchomi nasz prost aplikacje moemy poprzez klawisz Run zawierajcy ikon z zielonym trjktem.
Poprzez menu Debug - > Start Debugging lub Debug -> Start Without Debugging.
Po uruchomieniu aplikacji stworzy si plik, z ktrego pomoc moemy uruchamia nasz aplikacj. Znajduje si
on w katalogu
cieka do zainstalowanego Visual C#...\ Visual Studio 2005\Projects\Magazyn\bin\Debug
lub/oraz
cieka do zainstalowanego Visual C#...\ Visual Studio 2005\Projects\Magazyn\bin\Release
Na moim komputerze cieka jest nastpujca:
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Magazyn\bin\Debug
a plik ma nazw Magazyn.exe .
Efekt dziaania programu znajduje si poniej.
Zasady w C#
Zanim zaczniemy pisa programy, powinnimy pozna kilka podstawowych zasad dotyczcych jzyka C#.
Komentarze
Nie kady tekst znajdujcy si w pliku jest czci kodu programu. Istnieje co takiego jak komentarze. S one
jakby notatkami sporzdzanymi przez programist. Im wicej komentarzy, tym lepiej J Naley opisywa za
pomoc komentarzy wikszo tworzonych przez nas instrukcji, poniewa za kilka dni (nie mwic ju o
miesicach czy latach) moemy nie pamita co chcielimy w danym miejscu osign. Komentarze w C#
moemy robi na kilka sposobw. W naszym kursie bdziemy stosowa tylko jeden podwjny znak ukonika
//. Wszystko co znajdzie si za tym znakiem w danej linijce bdzie komentarzem.
Formatowanie
Bardzo wan rzecz w programowaniu jest formatowanie kodu. Nie jest to sztuka dla sztuki, jakby si mogo
wydawa niedowiadczonemu programicie, ale praktyka poprawiajca czytelno naszego kodu rdowego. Na
szczcie Visual C# odwala duo roboty za nas - samo robi wcicia (akapity).
Akapity moemy zmniejsza lub zwiksza zaznaczajc fragment tekstu i klikajc przyciski
IntelliSense podpowiadacz
Visual Studio podpowiada nam podczas pisania kodu. Samo sugeruje jaki wyraz powinnimy, bd moemy, w
danej chwili napisa. Wywietla list dozwolonych w danym miejscu instrukcji. Podpowiadacz wcza si sam w
niektrych momentach, ale moemy wywoa go samemu naciskajc Ctrl i Space.
Podpowiada np. jakie klasy znajduj si w projekcie (a dokadniej przestrzeni nazw, o ktrej bdzie mowa w
przyszoci).
class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello world !");
System.Console.ReadLine();
}
}
Po skompilowaniu i uruchomieniu programu otrzymujemy napis Hello world !. Jak atwo si domyle, za
wypisywanie tekstu odpowiedzialna jest metoda
Na razie nie przejmujmy si przestrzeniami nazw - wystarczy, e bdziemy traktowa je jako pewnego rodzaju
zbir zdefiniowanych klas. Gdyby wszystkie klasy (a jest ich w .NET tysice) znajdoway si w jednym miejscu,
nikt nie potrafiby znale mu potrzebnej, tak wic pogrupowano klasy w przestrzenie nazw. Console to gotowa
klasa stworzona dla nas przez Microsoft i umieszczona w przestrzeni System. Klasy, ktre bdziemy tworzy
moemy umieszcza we wasnych przestrzeniach. Przestrzenie, klasy, zmienne i metody tworz w pewien sposb
hierarchi: przestrzenie zawieraj klasy, te natomiast zmienne i metody. Poruszajc si po tej hierarchii stosujemy
kropki. To one, tak jak gazie w drzewach, cz klas z jej zmienn lub metod.
WriteLine a Write
Istnieje take metoda Write, rnica si od WriteLine tym, e po wypisaniu tekstu kursor nie przechodzi do
nowej linii.
class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Pierwszy napis wypisany przez metod
WriteLine");
System.Console.WriteLine("Drugi napis wypisany przez metod
WriteLine");
System.Console.Write("Pierwszy napis wypisany przez metod Write");
System.Console.Write("Drugi napis wypisany przez metod Write");
System.Console.ReadLine();
}
}
Wynik jaki powinnimy otrzyma.
System.Console.ReadLine();
Jest to w pewnym sensie metoda odwrotna do WriteLine, nie wypisuje tekstu, lecz czeka na tekst, ktry
powinnimy jej dostarczy. atwo moemy to sprawdzi uruchamiajc nasz program znowu. Dopki nie
naciniemy klawisza Enter, moemy pisa po ekranie. Nacinicie klawisza Enter koczy dziaanie metody
ReadLine.
Nasz program skada si z jednej klasy HelloWorld. Wszystko znajdujce si pomidzy klamrami { } to ciao
klasy. Na ciao naszej klasy skada si tylko jedna metoda Main. Jest to bardzo wana funkcja w C#, poniewa
wykonanie wszystkich programw rozpoczyna si od tej metody.
Sowo kluczowe class okrela pocztek definicji klasy, w tym przypadku HelloWorld.
Co znacz sowa static oraz void znajdujce si przed Main ?
Na razie nie przejmujmy si nimi za bardzo. Wystarczy wiedzie, e static okrela nam, e metoda moe dziaa
mimo, e nie tworzymy obiektw klasy HelloWorld (mamy tylko jej definicj). Void natomiast okrela, e
Main nie zwraca nam adnego wyniku (gdyby to bya metoda dodajca dwie liczby to zwracaaby nam sum).
Klasa HelloWorld to klasa gwna programu, poniewa zawiera metod Main, czyli jest jakby punktem startu
naszej aplikacji. Nie tworzymy obiektw tej klasy, po prostu wykonanie programu rozpoczyna si od pierwszej
instrukcji wewntrz metody Main. Pora wic na bardziej rozbudowany przykad.
class Echo
{
string napis;
public void WczytajNapis()
{
System.Console.WriteLine("Podaj napis.");
napis = System.Console.ReadLine();
}
public void Napisz()
{
System.Console.Write("Napisae: ");
System.Console.WriteLine(napis);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiektEcho = new Echo();
obiektEcho.WczytajNapis();
obiektEcho.Napisz();
System.Console.ReadLine();
}
}
Jak nazwa wskazuje klas gwna jest KlasaGlowna. Zawiera ona znan ju nam metod Main, wewntrz
ktrej tworzymy obiekt klasy Echo oraz wykonujemy jej metody.
Pojawio si kilka nowych rzeczy. Omwmy najpierw klas Echo. Na pocztku zawiera ona zmienn typu
string, czyli tekstow (moe przechowywa napisy). Nastpnie znajduj si dwie metody rozpoczynajce si od
sowa public. Wyraz ten oznacza dostpno elementw klasy dla innych klas. W tym przypadku mwi, e
metody ktre poprzedza s publiczne, czyli mog je wykonywa inne klasy (nie tylko klasa zawierajca definicje
tych metod). Dziki temu wewntrz klasy KlasaGlowna moemy nie tylko tworzy obiekty klasy Echo, ale te
wykona publiczne metody klasy Echo.
Nastpujca linijka
napis = System.Console.ReadLine();
oznacza, e program prosi nas o podanie tekstu (oczekuje tego metoda ReadLine()). Po naciniciu klawisza
Enter, a wic po zakoczeniu wprowadzania tekstu, to co wpisalimy lduje wewntrz zmiennej napis.
Pozostaa zawarto metod powinna by ju dla nas jasna. Przeledmy jeszcze wykonanie metody Main w
gwnej klasie. W pierwszej linijce tworzymy nowy obiekt klasy Echo i wkadamy go do zmiennej obiektEcho.
Cz
Echo obiektEcho
to deklaracja zmiennej obiektEcho, ktra moe przechowywa tylko obiekty klasy Echo. Nastpnie mamy znak
=, ktry przypisuje warto, ktr bdziemy przechowywa wewntrz naszej zmiennej. Teraz wystarczy nam
stworzy nowy obiekt klasy Echo, aby mie co zaadowa do zmiennej.
new Echo();
A oto wynik dziaania powyszego programu.
Pojawio si nowe dla nas swko new. New suy do tworzenia nowych instancji klas, a wic tworzenia
obiektw na podstawie zdefiniowanej klasy.
Wicej o tworzeniu nowych obiektw, a take o konstruktorach oraz typach referencyjnych i prostych powiemy
sobie w nastpnym artykule.
Definiowanie konstruktorw
Przypomnijmy sobie program z poprzedniego artykuu.
class Echo
{
string napis;
public void WczytajNapis()
{
System.Console.WriteLine("Podaj napis.");
napis = System.Console.ReadLine();
}
class Echo
{
string napis;
public Echo(string nowyNapis)
{
napis = nowyNapis;
}
public void Napisz()
{
System.Console.Write("Napisae: ");
System.Console.WriteLine(napis);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiektEcho = new Echo("Napis podany w konstruktorze");
obiektEcho.Napisz();
System.Console.ReadLine();
}
}
Konstruktor zdefiniowany jest tutaj:
public Echo(string nowyNapis)
{
napis = nowyNapis;
}
Definicj konstruktora powinno poprzedza swko public, poniewa konstruktor bdzie uywany wewntrz
innych klas, ktre bd chciay powoywa do ycia obiekty klasy Echo. Istniej sytuacje, w ktrych naley
zdefiniowa prywatny konstruktor, jednak nas one na razie nie dotycz J Parametr jaki przyjmuje konstruktor to
nowyNapis. Jest to parametr typu string, a wic tekstowy. W ciele konstruktora, zmiennej napis
przypisujemy warto podan w parametrze.
Zobaczmy teraz jak bdzie wyglda wynik dziaania programu z domylnym konstruktorem.
class Echo
{
string napis;
public void Napisz()
{
System.Console.WriteLine(napis);
System.Console.ReadLine();
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiektEcho = new Echo();
obiektEcho.Napisz();
}
}
Nic nie pojawio si na ekranie, poniewa nie wpisujemy adnej wartoci do zmiennej napis. Domyln
wartoci dla zmiennej typu string jest pusty tekst, a wic jeli chcemy uy zmiennej tekstowej, do ktrej
wczeniej nic nie woylimy wynik bdzie taki, jakbymy wykonali wczeniej instrukcj:
napis = "";
Spjrzmy na program z konstruktorem zdefiniowanym przez nas, ale bdcym identycznym jak domylny.
class Echo{
string napis;
public Echo()
{
}
public void Napisz()
{
System.Console.WriteLine(napis);
System.Console.ReadLine();
}
}
class KlasaGlowna
{
static void Main()
{
class Echo
{
string napis;
string napis2;
public Echo()
{
}
public Echo(string parametr)
{
napis = parametr;
}
public Echo(string parametr1, string parametr2)
{
napis = parametr1;
napis2 = parametr2;
}
public void Napisz()
{
System.Console.WriteLine(napis);
System.Console.WriteLine(napis2);
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiekt1 = new Echo();
Echo obiekt2 = new Echo("Konstruktor z jednym parametrem.");
Echo obiekt3 = new Echo("Konstruktor z dwoma parametrami.","Drugi
parametr.");
obiekt1.Napisz();
obiekt2.Napisz();
obiekt3.Napisz();
System.Console.ReadLine();
}
}
Stworzylimy 3 konstruktory, pierwszy bezparametrowy (zmienne napis oraz napis2 otrzymuj
domylne puste wartoci), drugi z jednym parametrem przypisujcym warto zmiennej napis oraz
trzeci, ktry przypisuje wartoci obydwu zmiennym. W metodzie Main() klasy KlasaGlowna
tworzymy trzy obiekty klasy Echo, wywoujc stworzone przez nas konstruktory. Wynik dziaania
programu to wypisane wartoci znajdujce si w zmiennych napis oraz napis2 kadego z obiektw.
Wan spraw jest, aby deklaracje naszych konstruktorw byy unikalne, a wic jeli mamy 3 rne
konstruktory to wywoujc je powinno by jednoznacznie wiadomo, o ktry chodzi. Aby konstruktory
odrniay si musz mie rna liczb parametrw bd rny ich typ (np. jeden z parametrem typu
string, a drugi z parametrem typu int). W naszym przykadzie konstruktory rni si iloci
otrzymywanych parametrw. Wywoujc konstruktor z jednym parametrem typu string,
jednoznacznie wiadomo, e chodzi o drugi konstruktor.
Inicjalizacja skadowych
Jeli nasz klasa jest rozbudowana i ma wiele zmiennych oraz konstruktorw to moe si zdarzy, e w
kadym z nich bdziemy musieli przypisywa wartoci zmiennym. Duo nadmiarowej pracy
dublowanie si kodu. Moemy temu zapobiec na kilka sposobw.
class Echo
{
string napis;
string napis2;
class Echo
{
string napis;
string napis2;
}
}
class KlasaGlowna
{
static void Main()
{
Echo obiekt = new Echo("Pierwszy parametr.", "Drugi parametr.");
obiekt.Napisz();
System.Console.ReadLine();
}
}
class Echo
{
string napis = "Pierwszy parametr.";
string napis2 = "Drugi parametr.";
wiczenie
Stwrz klas Czlowiek zawierajc zmienne:
Zdefiniuj konstruktor dla tej klasy, ktry na podstawie otrzymanych parametrw zainicjalizuje jego zmienne.
Stwrz klas gwn aplikacji, w jej metodzie Main() stwrz obiekt klasy Czlowiek przekazujc do konstruktora
odpowiednie wartoci. Wypisz na ekranie zawarto zmiennych opisujcych nowopowstay obiekt (imi, nazwisko
oraz wiek).
+ dodawanie,
- odejmowanie,
* mnoenie,
/ dzielenie
Znajc te podstawowe operatory moemy ju napisa prosty kalkulator w C#, ktry np. dodaje dwie liczby.
class KlasaGlowna
{
static void Main()
{
string x;
string y;
double wynik;
y = System.Console.ReadLine();
Jeli uruchamialimy nasz aplikacj w trybie debuggera (Start debugging klawisz F5 lub przycisk z zielonym
trjktem), pojawi nam si okno powiadamiajce nas o bdzie wykonania wraz z opisem.
Jeli uruchamialimy w trybie bez debuggera (Start Without Debugging Ctrl + F5 lub przez menu Debug),
pojawi nam si ponisze okno.
W liczbach, ktre podalimy (podczas wykonania programu, a nie w kodzie rdowym) cz dziesitn
oddzielamy za pomoc przecinka, a nie kropki (kropki uywa si zawsze w kodzie rdowym programu),
poniewa program rozpoznaje ustawienia regionalne na naszym komputerze.
Czsto wykorzystywanym operatorem jest modulo %. Dziaanie, ktre wykonujemy za pomoc tego operatora
bazuje na zwykym dzieleniu. Wynikiem dzielenia dwch liczb za pomoc modulo jest reszta np. 7 % 3 = 1.
Operatory przypisania
Do tej pory czsto uywalimy operatora =. Jak wiemy suy on do przypisywania wartoci do zmiennych.
Istniej operatory pochodne od =, takie jak += , -= , *= , /= , %= (wymieniem tylko najwaniejsze).
Przeledmy to na przykadach.
Najpierw program z wykorzystaniem operatora =.
class KlasaGlowna
{
static void Main()
{
int wynik;
wynik = 7 + 3;
System.Console.WriteLine("Wynik: " + wynik);|
System.Console.ReadLine();
}
}
Teraz program z wykorzystaniem +=
class KlasaGlowna
{
static void Main()
{
int wynik = 7;
wynik += 3;
System.Console.WriteLine("Wynik: " + wynik);
System.Console.ReadLine();
}
}
Inkrementacja i dekrementacja
Na pewno syszelicie o jzyku C++. Jego nazwa powstaa ze zczenia nazwy jzyka C (poprzednik C++) oraz
operatora ++. Operator ten to operator inkrementacji. Ma on swojego odpowiednika sucego do
dekrementacji - - . Obydwa operatory s jednoargumentowe, czyli nie potrzebuj dwch argumentw tak jak
np. + czy -. Operator ++ zwiksza zmienn o 1, a - - zmniejsza. Jest to udogodnienie, aby nie pisa
caego wyraenia
x = x + 1;
lub
x += 1;
albo tylko
x++;
wiczenie
Napisz program pobierajcy dwie liczby i wykonujcy na nich pi dziaa arytmetycznych z wykorzystaniem
operatorw: += , -= , *= , /= , %=.
Rozwizanie