Professional Documents
Culture Documents
Osijek
Auditorne vjebe Kneza Trpimira 2b
31000 Osijek
www.etfos.hr
1. Uvod u C#
C# sadri sve dobre odlike potpuno objektnog programskog jezika (koje veinom
preuzima iz C++ i Jave), a u sklopu .NET platforme omoguava kreiranje vizualnih
aplikacija ak i onim korisnicima koji nemaju programerskog iskustva. Takoer daje dobar
uvid u nain na koji nastaju objektne i vizualne aplikacije, i vrlo je lako nauiti korisnike kako
projektirati takve aplikacije i upravljati njihovim koritenjem. C# sadri samo oko 80
kljunih rijei i na desetke ugraenih tipova podataka kao to su:
C# ima velike mogunosti u definiranju klasa (tipova objekata), novih metoda i
svojstava, te koritenju enkapsulacije, nasljeivanja i polimorfizma kao to je to omogueno u
C++ i Javi. Takoer podrava XML stil unutar dokumenata, suelja, svojstva, dogaaje te
podrava rad s pokazivaima i ''garbage collection''. C# koristi postupak zvan garbage
collection za oslobaanje memorije koju zauzimaju objekti koji vie nisu dostupni programu.
Programer je osloboen brige o tome koji su mu objekti vie ne trebaju (garbage), jer to
umjesto njega radi sustav. Ako je objekt postojao i bio koriten neko vrijeme, moe postojati
nekoliko poziva na njega. Objekt postaje garbage tek nakon to su nestanu svi pozivi na njega.
1. skup programskih jezika u okviru Visual Studio razvojne okoline (jezici: C#, Visual
Basic .NET, Managed C++, Jscript .NET)
2. skup .NET Enterprise servera (u ijem sklopu se nalaze SQL Server, Exchange Server,
BizTalk)
4. mobilni .NET ureaji (koji nisu PC), kao npr. mobilni telefoni, ureaji za igre, i dr.
.NET okvir (Framework) je okvir koji povezuje programske jezike ukljuene u .NET
platformu, omoguavajui koritenje istih objekata (klasa), njihovo nasljeivanje i
polimorfizam u razliitim jezicima koje ta platforma podrava. Dakle, jezici u .NET platformi
su u isto vrijeme i nezavisni i integrirani. Kako .NET okvir omoguava integriranje
programskih jezika? .NET okvir definira specifikaciju zvanu CTS (Common Type System)
koje se moraju drati svi .NET jezici (npr. sve u .NET jeziku je objekt neke specifine klase
koja je dio korijenske klase System.Object). .NET okvir definira opi koncept klasa, suelja,
delegata, tipova referenci i tipova vrijednosti, takoer ukljuuje i Common Language
Specification (CLS), specifikaciju s pravilima kojih se treba drati kako bi integracija jezika
bila mogua i kako bi neki jezik mogao biti dio .NET platforme. Prevoditelji (compiler-i) tih
jezika rade na principu CLS pravila i mogu kreirati objekte koji mogu meusobno
komunicirati neovisno o jeziku u kojem su napisani. Tako se stvara biblioteka klasa unutar
.NET okvira - Framework Class Library (FCL) koju moe koristiti bilo koji jezik koji se
dri CLS-a.
Glavne komponente .NET okvira su:
etiri slubena programska jezika: C#, Visual Basic .NET, Managed C++, Jscript .NET +
ova dva glavna dijela koja moe koristiti svaki .NET jezik:
iva bia
Vodozemci
Gmazovi
Sisavci
ivotinje
Ljudi
...daljnja podjela prema rasi, spolu, itd.
Postoji hijerarhija prostora za nazive, tako jedan prostor moe sadravati druge
prostore u hijerarhijskom poretku. Prostori za nazive su sadrani unutar .NET okvira, ali i
korisnici razvojnih alata mogu koristiti te prostore.
// Namespace deklaracija
using System;
Alat koji daje prikaz svih raspoloivih prostora za nazive, klasa i metoda, te prua i
sintaksu i pomo za upotrebu nekog prostora za naziv ili klase je Object Browser. Pokree
se s omou izbornika View -> Object Browser. Najprije se u prozoru prikazuju prostori za
nazive koji se koriste u aktivnom projektu, ali se pretraivanjem moe dobiti pomo za bilo
koji prostor za nazive. Pretpostavimo da elimo pronai upute kako se koristi klasa za ispis
poruke korisniku na ekranu aplikacije. Ako u polje za pretraivanje u Object Browser-u
upiemo npr. ''MessageBox'' i pritisnemo Enter, dobije se popis svih skupina klasa za ispis
poruka. Ako elimo pronai samo klase za ispis poruka u Windows formi, tada emo na
popisu klasa oznaiti ''System.Windows.Form.MessageBox''. Na ekranu e se pojaviti sve
metode (postupci koji se mogu napraviti) za tu klasu. Tipkom F1 na ekranu se dobiva pomo
za koritenje te klase. Za povratak natrag potrebno je zatvoriti i prozor za pomo i prozor
Object Browser-a.
Sve naredbe moemo pisati upotrebom dueg naina, tj. navoenjem pune sintakse svih
prostora naziva koji se koriste za ispis poruke na ekranu:
Ako upisujemo dui nain pozivanja nekog objekta, to se zove potpuno kvalificirana
naredba. Kod kraeg naina moe se koristiti mogunost IntelliSense ugraena u alat, koja
prua pomo pri pisanju naredbi na nain da nam prikazuje listu s moguim klasama,
objektima, metodama koje moemo izabrati s popisa. Aktivira se automatski pri poetku
pisanja naredbe ili tipkom Ctrl-Space. Dui (potpuno kvalificirani) nain pisanja naredbi ima
smisla koristiti ako u razliitim prostorima za nazive koristimo klase ili objekte s istim
nazivom, jer se moe pratiti iz kojeg prostora je uzet odreeni objekt. U svakom drugom
sluaju praktinije je koristiti krai nain pisanja naredbi.
1. 1. C# tipovi podataka
1. Value types (tipovi vrijednosti) - oni koji se koriste za uvanje dijelova informacija u
memoriji standardni tipovi (npr. brojevi i tekst)
2. Reference types (tipovi referenci) - oni koji su reference i pokazuju na objekte
napravljene iz klasa
Tip Opis .NET tip Tip Opis .NET tip Tip Opis .NET tip
int Cijeli broj (od -2 147 483 647 System.Int32
do 2 147 483 647)
short Cijeli broj (manji: od -32768 System.Int16
do 32767)
long Cijeli broj (veliki, oko 16 System.Int64
znamenaka)
decimal Decimalni broj (fiksna System.Decimal
preciznost)
double Veliki realni broj s pokretnim System.Double
zarezom
string Niz karaktera (tekst) System.String
bool Logiki podatak (istina ili System.Boolean
la)
object Generiki objekt koji moe System.Object
sadravati druge tipove
float Mali realni broj s pokretnim System.Float
zarezom
byte 1 znak (vrijednosti 0-255) System.Byte
char 1 tekstualni znak System.Char
Slika 2. Standardni tipovi u C#.
N
n
rate
x15
quite_a_long_name
HelloWorld
HelloWorld
helloworld
HELLOWORLD i
HElloWorLD
class
public
static
if
else
while
1.2. Operatori
Izraz je dio koda programa koji predstavlja ili rauna neku vrijednost. Izraz
moe biti konstanta, varijabla, poziv funkcije ili vie ovakvih elemenata kombiniranih
operatorima (npr. + ili >). Vrijednost izraza moe se dodati varijabli, koristiti kao ulazna
vrijednost izlaznog potprograma ili pomou operatora povezati s drugim vrijednostima u
sloeniji izraz.
- aritmetiki
- operatori na bitovima
- relacijski
- logiki
Aritmetiki operatori
Operator Namjena
+ Zbrajanje
- Oduzimanje
* Mnoenje
/ Dijeljenje (za brojeve s pominim zarezom), cjelobrojno dijeljenje
% Ostatak cjelobrojnog dijeljenja (modulo)
++ Inkrementiranje (poveavanje vrijednosti za 1)
+= Zbrajanje i dodjela vrijednosti
-= Oduzimanje i dodjela vrijednosti
*= Mnoenje i dodjela vrijednosti
/= Dijeljenje i dodjela vrijednosti, cjelobrojno dijeljenje i dodjela vrijednosti
%= Ostatak cjelobrojnog dijeljenja (modulo) i dodjela vrijednosti
-- Dekrementiranje (smanjivanje vrijednosti za 1)
Operatori na bitovima
Operator
Namjena
~ Unarno NE (NOT) na bitovima
& I (AND) na bitovima
| ILI (OR) na bitovima
^ Ekskluzivno ILI (XOR) na bitovima
>> Pomicanje bitova udesno
>>> Pomicanje bitova udesno uz popunjavanje nulom (logiko pomicanje)
<< Pomicanje bitova ulijevo
&= I (AND) na bitovima
|= ILI (OR) na bitovima uz dodjeljivanje vrijednosti
^= Ekskluzivno ILI (XOR) na bitovima uz dodjeljivanje vrijednosti
>>= Pomicanje bitova udesno uz dodjeljivanje vrijednosti
>>>= Pomicanje bitova udesno uz popunjavanje nulom uz dodjeljivanje
vrijednosti
<<= Pomicanje bitova ulijevo uz dodjeljivanje vrijednosti
Relacijski operatori
Operator
Namjena
== Je jednako
!= Nije jednako
> Je vee
< Je manje
>= Vee jednako
<= Manje jednako
Logiki operatori
Operator
Namjena
! Logika negacija
& Logiki AND
| Logiki OR
^ Logiki XOR
&& Uvjetni AND
|| Uvjetni OR
== Jednakost
!= Nejednakost (razliito od)
&= AND uz dodjeljivanje vrijednosti
|= Logiki OR uz dodjeljivanje vrijednosti
^= Logiki XOR uz dodjeljivanje vrijednosti
?: Ternarni operator
Prioriteti operatora
Ukoliko se koristi vie operatora u jednom izrazu, a bez zagrada koje bi odredile redoslijed
procjenjivanja, potrebno je voditi rauna o prioritetima operatora koji odreuju redoslijed
procjenjivanja.
Operatori u istom redu imaju jednake prioritete, kad se pojave zajedno, unarni operatori i
operatori pridjeljivanja se procjenjuju s desna na lijevo, a ostali s lijeva na desno. Da biste
sami odredili prioritet najbolje je koristiti zagrade.
Primjer:
using System;
class Binary
{
public static void Main()
{
int x, y, rezultat;
float floatrezultat;
x = 7;
y = 5;
rezultat = x + y;
Console.WriteLine("x+y: {0}", rezultat);
rezultat = x - y;
Console.WriteLine("x-y: {0}", rezultat);
rezultat = x * y;
Console.WriteLine("x*y: {0}", rezultat);
rezultat = x / y;
Console.WriteLine("x/y: {0}", rezultat);
rezultat = x % y;
Console.WriteLine("x%y: {0}", rezultat);
rezultat += x;
Console.WriteLine("rezultat+=x: {0}", rezultat);
}
}
Rezultat:
x+y: 12
x-y: 2
x*y: 35
x/y: 1
x/y: 1.4
x%y: 2
rezultat+=x: 9
1.3. Blokovi, petlje, grananja
{
izrazi
}
Blokovi naredbi se najee javljaju unutar drugih izjava gdje slue okupljanju vie
naredbi u jednu cjelinu. Zapravo, blok se moe koristiti bilo gdje gdje se moe javiti izraz. A
ve smo vidjeli da je njegovo koritenje nuno kod podprograma main. Po definiciji,
podprogram je jedan blok.
Sam blok ne utjee na tok izvravanja programa. Preostalih est navedenih struktura koje
za razliku od bloka utjeu na tok izvravanja programa mogu se podijeliti u dvije skupine:
petlje i grananja.
While petlja se koristi za uzastopno ponavljanje jednog izraza. Tonije, while petlja ponavlja
izjavu dok je zadani uvjet istinit. While petlja ima oblik:
while (logiki izraz)
izraz
Budui da izraz moe biti, a najee i je, blok, uobiajene su while petlje oblika:
Kad raunalo doe do while izjave, procjenjuje logiki izraz koji vraa vrijednost true
ili false. Ako je vrijednost izraza false, raunalo preskae ostatak while petlje i nastavlja s
izvrenjem programa. Ako je vrijednost true, raunalo izvrava izraze unutar petlje, zatim se
vraa na poetak petlje i ponavlja postupak, tj. ponovo procjenjuje logiki izraz, te zavrava
petlju ako je vrijednost false, a nastavlja ako je vrijednost true. Ovo se nastavlja dok izraz ne
poprimi vrijednost false; sluaj u kojem se to nikad ne dogodi naziva se beskonana petlja.
using System;
class WhilePetlja
{
public static void Main()
{
int myInt = 0;
do
izraz
while ( logiki izraz );
do {
izrazi
} while (logiki izraz);
';' na kraju se ne smije izostaviti jer je to dio izraza. Izostavljanje bi prouzroilo sintaksnu
greku. Pri izvravanju do petlje, raunalo prvo izvrava tijelo petlje, tj. izraze unutar petlje, a
zatim procjenjuje logiki izraz. Ako je vrijednost izraza true, raunalo se vraa na poetak do
petlje i ponavlja postupak; ako je vrijednost logikog izraza false, izlazi iz petlje i nastavlja
izvravanje ostatka programa. Budui da se uvjet nastavljanja procjenjuje tek na kraju
petlje, tijelo petlje se izvrava bar jedan put.
U slijedeem primjeru pseudokoda "igre", do petlja ima smisla u odnosu na while petlju jer
osigurava barem jednu "igru", a osim toga, test koji se izvodi na kraju "igre" ne bi ni imao
smisla na poetku.
do {
Odigraj igru
Pitaj korisnika eli li igrati jo jednu igru
Proitaj korisnikov odgovor
} while ( Korisnikov odgovor je da );
For petlja je slina while petlji i ne donosi nove sposobnosti programskom jeziku, ali je za
neke namjene prikladnija od odgovarajue while petlje.
inicijalizacija
while ( uvjet nastavljanja ) {
izrazi
promjena vrijednosti
}
godine = 0; // inicijalizacija
while ( godine < 5 ) { // uvjet nastavljanja
Inicijalizacija, uvjet nastavljanja i promjena vrijednosti su objedinjeni u prvoj liniji for petlje.
Na ovaj nain su svi initelji for petlje na jednom mjestu to olakava itanje i razumijevanje.
For i izvorna while petlja izvravaju se jednako.
For petlja ima oblik:
Uvjet nastavljanja mora biti logiki izraz, dok inicijalizacija i promjena vrijednosti mogu
biti bilo kakvi izrazi.
Primjer:
using System;
class ForPetlja
{
public static void Main()
{
for (int i = 0; i < 20; i++)
{
if (i == 10)
break;
if (i % 2 == 0)
continue;
Foreach petlja se koristi za iteraciju kroz stavke u popisu. Ona djeluje na polja kao to su
ArrayList. Sintaksa foreach petlje je:
Tip je tip stavke koja se nalazi u listi, na primjer, ako je tip liste int [] tip e biti int.
Iteracijska varijabla je identifikator koji ste odabrali i trebala bi biti smislena. Na primjer,
ako lista sadri niz sa godinama ljudi, smislen naziv iteracijske varijable je dob. Kljuna rije
in je potrebna, jer je dio sintakse foreach petlje. Foreach petlja je samo za itanje to znai da
ne moete mijenjati iteracijsku varijablu unutar petlje. Na svakoj iteraciji kroz foreach petlju
provjerava se da li postoji jo elemenata u listi i ako postoji u iduem koraku se prelazi na
idui element liste. Kad je lista gotova zavrit e se petlja i kontrola programa e se prenijeti
na prvi izjavu nakon zavretka foreach bloka.
Primjer:
using System;
class ForEachPetlja
{
public static void Main()
{
string[] names = { "Ante", "Josip", "Martina", "Robert" };
Rezultat:
Ante
Josip
Martina
Robert
If izraz kae raunalu da izabere jedan od dvaju razliitih tokova izvravanja programa, u
ovisnosti o vrijednosti zadanog logikog izraza. If izraz "grananja" ili "odluivanja" ima
oblik:
if (logiki izraz)
izraz
else
izraz
Raunalo pri izvravanju if izraza procjenjuje logiki izraz koji vraa vrijednost true ili
false. Ako je vrijednost true, raunalo izvrava prvi izraz, a preskae izraz nakon "else". Ako je
vrijednost izraza false, raunalo preskae prvi izraz i izvrava drugi. U svakom sluaju, samo
jedan od tih dvaju izraza unutar if izraza e biti izvren. Dva izraza predstavljaju alternativne
tokove programa; raunalo se odluuje za jedan od ovih tokova programa na osnovi
vrijednosti logikog izraza.
Jedna od mogunosti primjene ove naredbe je odluivanje samo da li e neka naredba biti
izvrena ili ne. U tom sluaju if izraz nema else dio:
if (logiki izraz)
izraz
Ako je vijednost izraza true, raunalo izvrava izraz unutar if izraza, a u sluaju rezultata false
ga preskae.
if (logiki izraz) {
izrazi
}
else {
izrazi
}
ili samo:
if (logiki izraz) {
izrazi
}
Slijedi primjer if izraza koji zamjenjuje vrijednosti dviju varijabli, x i y, ali samo ako je x vei
od y. Nakon izvravanja ovog if izraza, moemo biti sigurni da je x manji ili jednak y:
if ( x > y ) {
int temp; // deklariranje privremene varijable koja se koristi
// samo u ovom bloku
temp = x; // Sauvaj kopiju vrijednosti varijable x u temp
x = y; // Kopiraj vrijednost varijable y u x
y = temp; // Kopiraj vrijednost varijable temp u y
}
if ( br_godina > 1 ) {
System.Console.WriteLine("Vrijednost ulaganja nakon ");
System.Console.WriteLine("{0}", br_godina);
System.Console.WriteLine(" godina je ");
}
else {
System.Console.WriteLine("Vrijednost nakon 1 godine:");
}
System.Console.WriteLine("{0}", ulaganje +" kn");
Switch izraz koristi znatno rijee nego if izraz, vrlo je koristan za grananja u vie grana. Switch
izraz omoguuje procjenu uvjeta i na osnovu te vrijednosti skok na neko mjesto unutar switch
izraza. Vrijednost izraza koji se procjenjuje mora biti cjelobrojna (byte, short, int ili char),
nikako ne moe biti string ili realni broj. Za razliku od kombinacije if - else, ovdje se ne moe
nalaziti logiki izraz. Razlog je tome u injenici da naredba switch utvruje vrijednost izraza u
odreenom trenutku i zatim skae na blok koji je oznaen vrijednou dobivene cjelobrojne
konstante oblika "case konstanta:". Mogua je takoer upotreba oznake "default:" na koju se
izvodi skok u sluaju da vrijednost izraza ne odgovara ni jednoj od oznaka sluaja.
Switch izraz ima oblik:
switch (izraz) {
case konstanta_1:
izrazi_1
break;
case konstanta_2:
izrazi_2
break;
.
. // (ostali sluajevi)
.
case konstanta_N:
izrazi_N
break;
default: // proizvoljni postavni sluaj
izrazi_(N+1)
} // kraj switch izraza
Break naredbe su stvar izbora i nisu obavezne. Uinak break naredbe je da skae na
kraj switch izraza. Ako se izostavi break naredba raunalo e nastaviti s izvravanjem
programa, izvravajui redom naredbe iz slijedeih sluajeva. Mogue je izostaviti itave
grupe izraza s break naredbom i tako dobiti dvije (ili vie) oznaka sluaja u jednom redu, ime
se omoguava skok na isti skup izraza za razliite vrijednosti izraza u switch naredbi.
Primjer upotrebe switch naredbe (uoiti da konstante u oznakama sluaja ne moraju biti
poredane po nekom redu, vano je da su razliite):
Osim sintaksnih i semantikih greaka, u aplikaciji se mogu pojaviti i greke izuzetaka (eng.
exceptions). One se ne vide kod prevoenja (prilikom Build-anja i Debug-iranja) nego se
pojavljuju prilikom izvravanja aplikacije i ne mogu se sprijeiti. To su greke koje nastaju
najee zbog unosa neodgovarajuih podataka od strane korisnika, ili zbog neunesenih
podataka.
Ako korisnik u textbox ne unese neki podatak koji je potreban (npr. plau djelatnika), pa se ne
moe izraunati prosjena plaa, pojavit e se poruka o greci i zaustaviti aplikacija. Npr. ako
korisnik prilikom unosa nekog podatka s kojim treba dijeliti neki broj unese vrijednost 0. Npr.
ako se unese vrijednost koja po tipu ne odgovara tipu vrijednosti koju treba unijeti u
odgovarajui textbox (npr. ako se oekuje da se unese broj, a korisnik je unio tekst).
Primjer:
using System;
using System.IO;
class tryCatchDemo
{
static void Main(string[] args)
{
try
{
File.OpenRead("Nepostojeca_Datoteka");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
Gornji primjer sastoji se od jednog catch bloka koji e uhavitit iznimku ako pokuamo
proitati nepostojeu datoteku. U ovom sluaju samo e ispisati poruku o pogreci u konzoli.
Iznimka moe zavriti program, a da pri tome ostavi program u nepostojanom stanju
bez oslobaanja svih resursa i ienja varijabli. Catch blok je prikladno mjesto da se uhvate
iznimke i pokua popraviti program. Ponekad je potrebno napraviti oslobaanje resursa
neovisno o tome jeste li uspjeli popraviti iznimku ili ne. U takvim situacijama se najee
korisiti finally blok. Kao to znate, datoteni tok mora biti zatvoren kad zavrite rad s
datotekom. U tom sluaju, file stream je resurs koji treba biti oien. U iduem primjeru,
outStream je uspjeno otvoren, to znai da program sada moe rukovati datotekom. Kada
pokuate otvoriti InStream, pokrenut e se FileNotFoundException i prebaciti izvoenje
programa u catch blok. Mogue je zatvoriti outStream catch bloku, ali to ako se algoritam
izvri uspjeno? Tada datoteka nikada nee biti zatvorena. Sreom, ukljuili smo Finally blok
koji e se uvijek biti izvren. Bez obzira da li e algoritam podii iznimku ili ne, kod u bloku
Finally e se izvriti prije nego napusti metodu.
Primjer:
using System;
using System.IO;
class FinallyDemo
{
static void Main(string[] args)
{
FileStream outStream = null;
FileStream inStream = null;
try
{
outStream = File.OpenWrite("Izlazna_datoteka.txt");
inStream = File.OpenRead("Nepostojeca_Datoteka.txt");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if (outStream != null)
{
outStream.Close();
Console.WriteLine("outStream zatvoren.");
}
if (inStream != null)
{
inStream.Close();
Console.WriteLine("inStream zatvoren.");
}
}
}
}
Primjer Windows form aplikacije koja ne rukuje iznimkama:
Kroz jedan primjer pokazat emo to se dogaa ako aplikacija ne rukuje izuzecima. Otvorite
novi projekt. U Visual Studio 2008 odaberite File -> New-> Project. Nakon toga Visual C# i
Windows Forms Application. Program pohranite pod nazivom Iznimka i kliknite na gumb
OK. Otvorit e se prazna forma. Pomou trake Toolbox kreirajte na formi input polja, texbox-
ove i tri gumba kao na slici:
Pohranite aplikaciju, zatvorite Visual Studio 2008, te na disku pronaite mapu u kojoj
je pohranjena Iznimka.exe izvrna datoteka. Da biste vidjeli to e se dogoditi ako korisnik
pokrene aplikaciju koja ne rukuje izuzecima, dvaput kliknite na Iznimka.exe datoteku. U prvi
okvir za tekst opet nemojte unijeti nita, nego samo kliknite na dugme ''Iznimka bez
rukovanja''. Pojavit e se poruka kao na slici:
Korisnik sada moe nastaviti aplikaciju klikom na dugme Continue ili prekinuti
klikom na dugme Quit. Ukoliko korisnik nastavi rad aplikacije (Continue), nee se ispisati
rezultat, jer je program prekinuo izvravanje, a ako klikne na dugme Quit, program e izai iz
plikacije u Windows operativni Sustav. Na taj nain onemoguuje se korisniku kvalitetan rad
s aplikacijom, te svaki programer treba u aplikaciji predvidjeti barem veinu izuzetaka koji se
mogu dogoditi i upisati naredbe koje rukuju s njima i tako omoguiti korisniku nesmetani rad
s aplikacijom.
Rukovanje izuzecima pomou petlja try...catch
try {
ovdje naredbe u kojima se moe pojaviti izuzetak
}
catch (tip izuzetka varijabla) {
ovdje naredba kojom se ispisuje poruka korisniku da unese ispravan podatak
}
U aplikaciji Iznimka napravit emo primjer rukovanja iznimkom. Otvorite projekt Iznimka, te
dvaput kliknite na dugme ''Try...catch'', kako biste se pozicionirali u metodu button2_click. U
metodu button2_click kopirajte sve naredbe iz prethodne metode button1_click. Neposredno
iza vitiaste zagrade, a ispred prve naredbe treba upisati naredbu: try. Dalje dodajte vitiaste
zagrade za naredbu try tako da sve upisane naredbe budu u zagradama. U dijelu catch treba
upisati naredbu koja e ispisati korisniku poruku da treba unijeti broj1. Trenutni kod za
metodu button2_Click izgledat e ovako:
Nakon ispisane poruke u MessageBox-u unesite neku cjelobrojnu vrijednost u prvi okvir za
tekst. Koji e se sada rezultat ispisati?
to e se dogoditi ako u prvi okvir za tekst unesemo decimalni broj ili neki tekst? Da li se
pojavljuje izuzetak? Pokuajte u prvi okvir za tekst unijeti broj: 2.3. Kliknite na dugme
Try...catch. Ponovo se pojavljuje poruka korisniku da treba unijeti cijeli broj. Isto ponovite
tako da u okvir za tekst unesete tekst ''Dobar dan.'' , a zatim kliknete na dugme Try...catch.
to se dogaa?
Petlja try..catch...finally
U sluaju kada elimo da program nastavi s radom iako se dogodio izuzetak (ne elimo
korisnika vraati na ponovni unos podataka), u try...catch petlju dodaje se naredba finally.
try {
ovdje naredbe u kojima se moe pojaviti izuzetak
}
catch [(tip izuzetka varijabla)] {
ovdje naredba kojom se ispisuje poruka korisniku da unese ispravan
podatak
}
finally {
ovdje naredba kojom se ispisuje poruka korisniku da je program nastavio
s radom unato izuzetku
}
Pohranite i pokrenite debug aplikacije. Nakon poruke u MessageBox-u da niste unijeli broj,
pojavit e se poruka u okviru textBox2 koju smo upisali u naredbu finally.