Professional Documents
Culture Documents
Veb Prezentacija Programskog Jezika C# PDF
Veb Prezentacija Programskog Jezika C# PDF
Tema:
Veb prezentacija programskog jezika C#
Maturski rad Veb prezentacija programskog jezika C#
Sadraj
I. Uvod u C# .........................................................................................................................................................4
I - 1. ta je .NET okruenje? ................................................................................................................................................... 4
I - 2. ta se nalazi unutar .NET okruenja? ............................................................................................................................ 4
I - 3. Kako napisati aplikaciju koristei .NET okruenje? ....................................................................................................... 4
MSIL i JIT ......................................................................................................................................................................4
Sklopovi .......................................................................................................................................................................4
Upravljivi kd ................................................................................................................................................................4
Povezivanje...................................................................................................................................................................4
ta je C#? .....................................................................................................................................................................4
Konzolna aplikacija..........................................................................................................................................................6
Pravila imenovanja..........................................................................................................................................................8
II - 1- 4. Izrazi ........................................................................................................................................................10
II - 1- 8. Imenovani prostori.......................................................................................................................................11
II - 2 - 3. Grananje ...................................................................................................................................................13
II - 2 - 4. Iskaz IF .....................................................................................................................................................13
II - 2 - 5. Iskaz switch................................................................................................................................................14
II - 2 - 6. Petlje .......................................................................................................................................................14
Dino Dedi 2
Maturski rad Veb prezentacija programskog jezika C#
II - 3 - 3. Parametri ..................................................................................................................................................17
II - 3 - 6. Izlazni parametri..........................................................................................................................................18
Delegati .....................................................................................................................................................................22
ta je dogaaj? ............................................................................................................................................................23
Osobine .....................................................................................................................................................................29
Dino Dedi 3
Maturski rad Veb prezentacija programskog jezika C#
I. Uvod u C#
I - 1. ta je .NET okruenje?
Projektno okruenje .NET je nova platforma za razvoj aplikacija napravljena od strane Microsoft-a, a
dizajnirano je tako da se moe koristiti od strane bilo kog programskog jezika. Ovo ukljuuje C#, kao i C++, Visual
Basic i Jscript. Svi ovi programski jezici imaju pristup projektnom okruenju .NET i mogu meusobno da
komuniciraju. Sasvim je mogue kod programiranja u C# koristiti kd napisan u Visual Basic.NET, kao i obrnuto.
I - 2. ta se nalazi unutar .NET okruenja?
Projektno okruenje .NET najveim dijelom se sastoji od ogromne biblioteke kodova koju upotrebljavamo
preko klijentskih jezika. Ova biblioteka podijeljena je na razliite module koje koristimo u zavisnosti od naeg
zadatka. Neki moduli su podijeljeni u razliite podmodule.
I - 3. Kako napisati aplikaciju koristei .NET okruenje?
Pisanje aplikacija unutar .NET projektnog okruenja u stvari znai pisanje koda uz pomo .NET biblioteke
koda. Preporuuje se korienje Visual Studio-ja za programiranje. Prednost ovog okruenja je lakoa kojom se
mogunosti .NET tehnologije mogu integrisati u na kd. Da bi se C# kd izvrio neophodno ga je prevesti u izvorni
ili originalni kd (kompajliranje kda). Unutar .NET okruenja ta operacija ima dvije faze.
MSIL i JIT
Kada kompajliramo kd koristei biblioteku .NET okruenja mi kompajliramo u kd Microsoftovog
posrednog jezika (Microsoft Intermediate Language - MSIL).
Da bi se program izvrio potrebno je jo rada. Za taj posao zaduen je kompajler pravo-na-vrijeme (engl.
Just-In-Time - JIT), koji prevodi MSIL u izvorni kd. Tek tada OS moe izvriti program. Dio imena pravo-na-
vrijeme odnosi se na to da se MSIL kd kompajlira samo kada je to potrebno.
Sklopovi
Kada kompajliramo aplikaciju MSIL kd se smijeta u posebne programske skupove. Takvi skupovi sadre i
izvrne programske datoteke. Programski skupovi pored MSIL-a sadre i takozvane meta informacije (dodatne
podatke koje koristi MSIL, kao to su zvukovi i slike). Meta podatci dozvoljavaju programskim skupovima da budu
potpuno samoopisujui. Ne trebaju nam nikakve dodatne informacije da bi smo koristili programske skupove. Ovo
u stvari zani da je razvoj aplikacija jednostavan.
Upravljivi kd
CLR vodi rauna o naoj aplikaciji kroz upravljanje memorijom, obezbjeivanjem sigurnosti, dozvoljava
meujeziko otklanjanje greaka itd. Suprotno ovome, aplikacije koje ne rade pod kontrolom CLR-a nazivaju se
neupravljive. U C# moemo napisati samo onaj kd koji radi pod upravljivim okruenjem.
Sakupljanje otpada
Jedna od najvanijih mogunosti upravljivog koda je sistem kolekcije otpada. Ovo je metod .NET-a koji se
brine o tome da memorija koju je aplikacija koristila tokom svog izvrenja bude obavezno ispranjena kada
aplikacija vie nije u upotrebi.
Uklapanje u cjelinu
Da bi smo napravili .NET aplikaciju potrebno je:
1. Kd za aplikaciju napisati koristei .NET jezik kao to je C#.
2. Ovaj kd se kompajlira u MSIL, koji je smjeten u programski skup.
3. Kd koji se izvrava mora se predhodno kompajlirati kroz JIT kompajler u izvorni kd.
4. Izvorni kd se izvrava preko upravljive metode CLR.
Povezivanje
C# kd koji se kompajlira u MSIL u koraku 2. ne mora da bude smjeten u jednu datoteku. Mogue je
podijeliti kd aplikacije u razliite datoteke koje e se tokom kompajliranja objediniti u programski skup odnosno
assembly. Razlog ove podjele je taj to je mnogo lake raditi sa vie manjih datoteka nego sa jednom ogromnom.
ta je C#?
C# je jedan od jezika koji slui za izradu aplikacija koje mogu raditi pod .NET CLR-om. To je evolucija C i C++
jezika koju je kreirao Microsoft da bi se radilo sa .NET okruenjem.
Dino Dedi 4
Maturski rad Veb prezentacija programskog jezika C#
Programiranje aplikacije u C# je jednostavnije nego u C++, jer je sintaksa prostija. Kd C# je malo razumljiviji
od C++ koda. Kod koda je jednostavnije otkloniti greke, .NET u svakom trenutku moe odrediti kojem tipu pripada
traeni podatak. C# je samo jedan od jezika koji omoguava rad sa .NET razvojnim okruenjem.
Kakve aplikacije moemo pisati u C#-u?
C# nema ogranienja u vezi toga kakve sve aplikacije moemo napraviti. C# koristi okruenje i samim tim
nema ogranienja u vezi sa moguim aplikacijama. Tipovi najee pravljenih aplikacija su:
Windows aplikacije To su aplikacije tipa Microsoft Office-a koje imaju izgled standardnih Windows
aplikacija. Ovo je pojednostavljeno koritenjem modula Windows obrazaca unutar .NET okruenja, koji u stvari ini
biblioteka kontrola (kao to su dugmii, palete alatki, meniji i tako dalje), a koje nam koriste pri izradi Windows
korisnikog interfejsa (UI).
Web aplikacije To su web strane koje moemo videti kroz bilo koji web pretraiva. Ovaj sistem se naziva
Active Server Pages.NET (ASP.NET), a C# moemo koristiti za izradu ASP.NET aplikacija uz pomo web obrazaca.
Web servisi Oni su nov i uzbudljiv nain izrade aplikacija koje su razmenljive prirode. Koristei web servie
preko Interneta moemo razmenjivati bilo koju vrstu podataka, koristei prostu sintaksu, ne vodei rauna o tome
u kom jeziku je napisana aplikacija niti na kom sistemu je postavljena.
I - 4. Visual Studio.NET
Visual Studio.NET (VS) koristi se za izradu aplikacija sastavljenih od prostih linijskih komandi pa sve do
kompleksnih tipova projekata. VS nije neophodan za programiranje u C#, ali nam mnogo olakava stvari. Slijedi
kratka lista razloga zbog kojih je VS pravi izbor za .NET razvojno okruenje:
VS tekst editor je povezan sa jezicima VS-a (ukljuujui C#) i to tako da omoguava pametnu detekciju
greaka i sugerie odgovarajui kd na pravom mestu dok mi tipkamo.
VS sadri i dizajnerske alate za aplikacije koje ukljuuju Windows obrasce, kao i web obrasce, a koji vam
omoguavaju prost drag-and-drop dizajn UI elemenata.
VS sadri nekoliko arobnjaka ili vodia koji vam automatizuju zadatke opte namjene, koji mogu dodati
odgovarajui kd postojeim datotekama, a da mi o tome ne brinemo.
Rjeenja u Visual Studio-u
Kada koristimo VS za razvoj aplikacija, to radimo kreiranjem rjeenja. Rjeenja sadre projekte koji mogu biti
zasnovani na Windows formularima, Web formularima itd. Rjeenja mogu sadrati i vie projekata, tako da
moemo grupisati srodan kd na jedno mesto, iako e se oni kompajlirati u razliite sklopove na razliitim mjestima
na disku.
Pisanje programa u jeziku C#
VS je ogroman i komplikovan proizvod. Prva aplikacija koja se uobiajeno kreira je jednostavna aplikacija
koja se pokree iz komandne linije. Kompleksnije aplikacije su bazirane na Windows formularima i njihova sintaksa
je mnogo komplikovanija.
Dino Dedi 5
Maturski rad Veb prezentacija programskog jezika C#
Dino Dedi 6
Maturski rad Veb prezentacija programskog jezika C#
U C# kodu poeljno je pisati komentare, koji uopte nisu dio C# koda, ali postoje unutar njega. Komentari
omoguavaju da se lake snalazimo u kodu C#. Postoje dva naina pisanja komentara, a to su:
/* Ovo je komentar */
/* Takoer...
... i ovo */
// Ovo je druga vrsta komentara.
Ovaj dio koda se izvrava prilikom pokretanja konzolne aplikacije. Jedini red koda koji e neto uraditi jeste
onaj koji smo dodali automatski generisanom kodu.
II - 1- 3. Promjenljive
Promjenljive nam slue da u njih pohranimo podatke. Promjenljive imaju vie tipova. Glavni razlog za ovakav
nain raspodjele po tipovima lei u tome to postoje razliiti tipovi podataka kojima se na drugaiji nain
manipulie. Da bismo koristili promjenljive one moraju biti deklarisane. To znai da moramo da im dodjelimo ime i
tip. Da bi se promjenljiva navela u jeziku C# koristi se tip. Npr.:
<tip> <ime>;
Promjenljiva koja nije deklarisana ili kojoj nije dodjeljena vrijednosti nee se kompajlirati.
Prosti tipovi promjenljivih
Prosti tipovi su brojane ili logike vrijednosti (tano ili netano). Veina prostih tipova su brojevi. Razlog za
podjelu tipova brojnih promjenljivih lei u samom mehanizmu smetanja brojeva kao nizova jedinica i nula u
Dino Dedi 7
Maturski rad Veb prezentacija programskog jezika C#
memoriju raunara. Za cjelobrojne vrijednosti jednostavno uzimamo odreen broj bitova (nezavisnih cifri koje
mogu biti jedinice ili nule) i predstavljamo na broj u binarnom formatu. Promjenljiva koja smjeta N bitova
dozvoljava nam da preko nje prikaemo bilo koji broj izmedu 0 i . Bilo koji broj iznad ove vrijednosti bie
prevelik da se smjesti u promjenljivu.
Tabela 1. Opseg vrijednosti u odnosu na tip podataka
Znak u koji stoji ispred imena nekih promjenljivih oznaava da u taj tip promjenljivih ne moemo smjetati
negativne brojeve, to se moe vidjeti iz kolone dozvoljenih vrijednosti u tabeli.
Pravila imenovanja
Programeri su do sada shvatili da je najbolje imenovati promjenljivu prema njenoj namjeni. U VS-u dovoljno
je da pokaziva mia namjestimo na ime promjenljive kojoj elimo da otkrijemo tip i ispisae se poruka koja nas o
tome obavjetava. Preporuka Microsoft-a je da koristimo konvenciju PascalCase.
Npr :
PrezimeUcenika
ZimaNasegNezadovoljstva
Tabela 2. Prefiksi tipova podataka
Dino Dedi 8
Maturski rad Veb prezentacija programskog jezika C#
Vrijednosti literala
U prethodnom primjeru vidjeli smo dvije vrijednosti literala - cjelobrojnu i znakovnu. I drugi tipovi
promjenljivih takoe mogu imati vrijednosti literala, to e biti prikazano u sljedeoj tabeli. Mnogi od njih ukljuuju
sufikse, odnosno nizove znakova koji se dodaju na kraju literala da bi se naznaio eljeni tip. Neki literali imaju vie
razliitih tipova koje na osnovu konteksta odreuje kompajler za vrijeme kompajliranja:
String literali
Tabela 5. Escape sekvence
Escape sekvence Znak koji pravi Vrednost znaka u unicode-u
\` jednostruki navodnik 0x0027
\" dvostruki navodnik 0x0022
\\ obrnuta kosa crta 0x005C
\0 nula 0x0000
\a alarm(pravi pitanje) 0x0007
\b unazad za jedan znak 0x00080
\f prelazak na sledeu stranicu 0x000C
\n novi red 0x000A
\r prenos u novi red 0x000D
\t horizontalni tabulator 0x0009
\v vertikalni tabulator 0x000B
Posljednja kolona ove tabele prikazuje Unicode vrijednosti. Za svaki Unicode znak moemo navesti
odgovarajuu escape sekvencu, kao u tabeli. Sekvenca se uvijek sastoji od znaka \ iza koga slijedi etvorocifrena
heksadecimalna vrijednost. To znai da su sljedea dva stringa ekvivalentna:
"Petar\s string."
"Petar\u0027s string"
Promjenljive moraju biti inicijalizovane pre nego to ih upotrijebimo. Moemo navesti vie razliitih
promjenljivih istog tipa u isto vrijeme ako ih odvojimo zarezom:
int xVelicina, yVelicina;
Druga tehnika koju ete sretati jeste dodjeljivanje vrijednosti promjenljivim dok ih deklariemo:
int godiste = 25;
Dino Dedi 9
Maturski rad Veb prezentacija programskog jezika C#
II - 1- 4. Izrazi
C# kd sadri vei broj operatora koji slue manipulaciji promjenjivih, ukljuujui i operator dodeljivanja.
Kombinovanjem operatora sa promenljivima i literalima moemo formirati izraze.
Postoji irok spektar operatora. Prosti ukljuuju sve osnovne matematike operacije, kao to je operator +
za sabiranje, a oni komplikovaniji manipulaciju nad sadrajem promenljive. Postoje i logiki operatori koji slue u
radu sa logikim promenljivima. Operatori se mogu grubo podeliti na tri kategorije:
unarni operatori koji rade samo sa jednim operandom
binarni operatori koji rade sa dva operanda
ternarni operatori koji rade sa tri operanda
II - 1- 5. Matematiki operatori
U donjoj tabeli navedeni su svi operatori zajedno sa kratkim primjerom njihove upotrebe i rezultatima.
Tabela 6. Operatori
Operator Kategorija Kategorija Rezultat
+ binarni var1 = var2 + var3; var1 je dodjeljena vrijednost sume
- binarni var1 = var2 - var3; var1 je dodejljena vrijednost razlike
* binarni var1 = var2 * var3 var1 je dodjeljena vrijednost proizvoda
/ binarni var1 = var2 /var3 var1 je dodjeljena vrijednost dijeljenja
% binarni var1 = var2 % var3 var1 je dodjeljena vrijednost koja je ostatak dijeljenja
+ unarni var1 = + var2 var1 je dodjeljena vrijednost var2
- unarni var1 = - var2 var1 je dodjeljena vrijednost var2
Operator ++ uvijek uveava svoj 1 operand za 1, a - - ga uvijek umanjuje za 1. Stavljanje operatora prije
operanda znai da se operand mijenja prije nego to se izvre dalja izraunavanja i obrnuto.
II - 1- 6. Operatori dodjeljivanja
U donjoj tabeli navedeni su operatori dodjeljivanja zajedno sa primjerom njihove upotrebe i rezultata.
Tabela 8. Operatori dodeljivanja
Dino Dedi 10
Maturski rad Veb prezentacija programskog jezika C#
II - 1- 7. Prvenstvo operatora
Kada raunar obrauje izraz, on izvrava svaki operator prema redoslijedu. To ne znai da se operatori
uvijek izraunavaju s lijeva na desno. Jednostavan primjer gdje se prvo izvrava operator + pa tek onda = :
var1 = var2 + var3;
Postoje i druge situacije kada prvenstvo izvoenja operatora nije oigledno, na primjer:
var1 = var2 + var3 * var4;
Ovdje je redoslijed izvravanja sljedei: prvo operator * , zatim + i na kraju =. Tu moemo odrediti prvenstvo
izvravanja koristei zagrade. Npr. :
var1 = (var2 + var3) * var4;
II - 1- 8. Imenovani prostori
Imenovani prostori se takoer koriste i prilikom kategorisanja objekata .NET okruenja. C# kd sadri u
globalnim imenovanim prostorima. To znai da se tom kodu moe pristupiti iz nekog drugog koda koji je unutar
globalnih imenovanih prostora tako to se navede njegovo ime. Moemo koristiti i kljunu rije namespace, da
bismo definisali imenovani prostor u bloku koda. Takva imena moraju biti kvalifikovana, ukoliko e ih koristiti kd
izvan imenovanog prostora.
Kvalifikovano ime je ono koje sadri sve informacije o svojoj hijerarhiji. Kvalifikovana imena koriste znak (.)
izmeu nivoa imenovanog prostora.
namespace LevelOne
{
//kd u imenovanom prostoru LevelOne
//ime "NameOne" definisano
}
//kd u globalnom imenovanom prostoru
Ovaj kd definie jedan imenovani prostor LevelOne kao i jedno ime u njemu, NameOne. Kd napisan
unutar LevelOne imenovanog prostora poziva ovo ime upotrebom "NameOne. Kd u globalnom imenovanom
prostoru mora pozivati ovo ime na sljedei nain: "LevelOne.NameOne".
U okviru imenovanih prostora moemo definisati ugnjedene imenovane prostore, takoer koristei
kljunu rije namespace. Ugnjedeni imenovani prostori se pozivaju preko svoje hijerarhije. Npr. :
namespace LevelOne
{
//kd u imenovanom prostoru LevelOne
namespace LevelTwo
{
//kd u imenovanom prostoru LevelOne.LevelTwo
//ime "NameTwo" definisano
}
}
//kd u globalnom imenovanom prostoru
Dino Dedi 11
Maturski rad Veb prezentacija programskog jezika C#
namespace LevelOne
{
//ime "NameThree" definisano
namespace LevelTwo
{
//ime "NameThree" definisano
}
}
Ovdje smo definisali dva imena, LevelOne.NameThree i LevelOne.LevelTwo.NameThree, koja se mogu
koristiti nezavisno jedno od drugoga. Kada definiemo imenovani prostor, moemo pojednostaviti pristup imenima
koje sadre pomou iskaza using. Npr. u sljedeem kodu iz imenovanog prostora LevelOne treba da imamo pristup
imenima u imenovanom prostora LevelOne.LevelTwo bez klasifikacije:
namespace LevelOne
{
using LevelTwo;
namespace LevelTwo
{
//ime
"LevelTwo" definisano
}
}
Sada iz imenovanog prostora LevelOne moemo pozvati ime LevelTwo.NameTwo pomou "NameTwo".
II - 2. Kontrola toka programa
Postoje dvije metode kontrole toka programa, odnosno redosljeda izvrenja redova u C# kodu.
Grananje gdje se izvrava kd uslovno u zavisnosti od rezultata nekog poreenja.
Petlje - ponavljanje izvrenja istih iskaza (odreeni broj puta do unaprijed zadatog
uslova).
II - 2 - 1. Bulova logika
Tip bool moe sadrati samo dvije vrijednosti: true ili false. Uglavnom se tipovi bool koriste da snimi rezultat
nekog poreenja. Poreenje zahtjeva upotrebu relacionih operatora koji su prikazanih u donjoj tabeli.
Tabela 10. Operatori poreenja
Operator Kategorija Primjer izraza Rezultat
var1 je dodjeljena vrijednost true ako je
== binarni var1=var2== var3;
var2 jednaka var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
!= binarni var1=var2!= var
var2 nije jednaka var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
< binarni var1=var2< var3
var2 manja od var3, u suprotnom false.
var1 je dodjeljena vrijednost true ako je
> binarni var1=var2>var3;
var2 vea od var3, u suprotnom false.
var2 manja ili jednaka var3, u suprotnom
<= binarni var1=var2<= var3;
false.
var2 vea ili jednaka var3, u suprotnom
>= binarni var1=var2>= var3;
false.
Dino Dedi 12
Maturski rad Veb prezentacija programskog jezika C#
Njihov rezultat je potpuno isti kao & i |, ali postoji bitna razlika u nainu na koji se dobija njihov rezultat, to
moe dati bolje performanse programa. Oba operatora prvo ispituju vrijednost prvog operanda (var2, pa na
osnovu vrijednosti ovog operanda moda nee biti potrebno da se ispita drugi operand (var 3).
II - 2 - 2. Iskaz goto
Jezik C# dozvoljava da se odreeni dijelovi koda obiljee i da se na ta mesta direktno skae pomou iskaza
goto. Galvna korist je u tome to moemo na jednostavan nain kontrolisati ta se u kodu izvrava i kada. Iskaz
goto se koristi na sljedei nain:
goto <imeOznake>;
Npr.:
int myInteger = 5;
goto myLabel;
myInteger +=10;
myLabel;
Console.WriteLine("myInteger = {0}", myInteger);
Ovdje se ispituje <test> da bi se dobila logika vrednost, pa je rezultat operator <resultIfTrue> ili
<resultIfFalse> u zavisnosti od te vrijednosti.
II - 2 - 4. Iskaz IF
Iskaz if je mnogo bolji nain za donoenje odluka. Ovaj iskaz koristimo da uslovno izvrimo druge iskaze.
Najjednostavnije koritenje iskaza if je sledee:
Dino Dedi 13
Maturski rad Veb prezentacija programskog jezika C#
If (<test>):
<kd se izvrava ako je test istinit >;
Ovdje se <test> izraunava (mora biti logika vrednost da bi se kd kompajlirao), a iskaz ispod se izvrava
ako uslov <test> ima vrednost true. Nakon izvrenja tog koda, ili ukoliko <test> imao rezultat false, program se
nastavlja od sledeeg reda koda.
Moemo navesti i dodatni kd koristei iskaz else u kombinaciji sa iskazom if. Ovaj iskaz se izvrava ako
<test> ima vrednost false:
if (<test>)
<kd se izvrava ako je <test> true>;
else
<kd se izvrava ako je <test> false>;
Da bi ste probali jednostavan ispis na ekranu u okviru velikih zgrada upiite tekst tano kao to je prikazano:
static void Main(string[] args) {
string poredjenje;
Console.WriteLine("Dobar dan.");
Console.WriteLine("Unesite prvi broj");
double prvi = Convert.ToDouble(Console.ReadLine());
Da biste probali jednostavan ispis na ekranu upiite tekst tano kao to je prikazano:
Dino Dedi 14
Maturski rad Veb prezentacija programskog jezika C#
class Program
{
static void Main(string[] args)
{
int i = 1;
do {
Console.WriteLine(i++);
}
while (i < 11);
Console.ReadKey(); Slika 4. Rezultat izvravanja
} navedenog programa
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Petlja while
Kod while petlji logiki test se izvrava na poetku. Ukoliko je rezultat testa false, ciklus petlje se nikad ne
izvri, nego se prelazi na red koda koji se nalazi iza petlje. Petlje while se definiu na sledei nain:
while (<test>)
{
<kd unutar petlje>
}
int i=1;
Da biste probali jednostavan ispis na ekranu upiite tekst tano kao to je prikazano:
class Program
{
static void Main(string[] args)
{
int i = 1;
while (i <= 11) {
Console.WriteLine(i++);
}
Console.ReadKey();
}
} Slika 5. Rezultat izvravanja
navedenog programa
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa
ispisanim tekstom:
Petlja for
Petlja for se izvrava unapred odreeni broj puta i odrava svoj sopstveni broja. Ako elimo petlju sa
brojaem koji se poveava od 1 do 10 u koracima po jedan, poetna vrednost je 1 - uslov je da broja bude manji ili
jednak 10, a operacija koja se izvodi na kraju svakog ciklusa je poveavanje brojaa za jedan.
int i;
for (i=1; i<=10; ++ i) {
Console.Writeline(i); }
Da biste probali jednostavan ispis na ekranu upiite tekst tano kao to je prikazano:
class Program {
static void Main(string[] args) {
int i;
for (i = 1; i <= 10; ++i) {
Console.WriteLine(i); }
Console.ReadKey();
}
Dino Dedi 15
Maturski rad Veb prezentacija programskog jezika C#
Kd e ispisati brojeve od 1 do 5, zatim e komanda break prouzrokovati izlaz kada bude jednako 5.
Continue zaustavlja samo trenutni ciklus, a ne cijelu petlju. Npr. :
int i = 1;
for (i=l; i<=10; i++) {
if ( (i. % 2)==0)
continue;
Console.WriteLine(i) ;
}
Trei metod je koritenje iskaza goto kao to smo videli ranije, na primjer:
int i = 1;
while (i <=10) {
if (i == 6)
goto TackaIzlaza;
Console.WriteLine i++) ;
}
Console.WriteLine ("Ovaj kd se nikad nee izvriti .);
TackaIzlaza;
Console.WriteLine ("Ovaj kd se izvrava kad se iz petlje izae uz pomo goto. ");
Beskonane petlje
Mogue je (grekom ili namjerno), definisati petlje koje se nikada ne zavravaju, tzv. beskonane petlje. Kao
vrlo jednostavan primjer pogledajte sledee:
while (true)
{
// kd u petlji
}
Funkcije
Izvoenje operacije nad podacima podrazumijevalo je postavljanje koda na tano odreeno mesto gde on
treba da funkcionie.Takva programska struktura je ograniena. Ovaj problem rjeavamo uz pomo funkcija.
Funkcije u jeziku C# predstavljaju sredstva kojima se obezbjeuje blok koda koji moe biti izvren na bilo kom
mjestu u aplikaciji.
Potrebno je da samo jednom napiemo kd, i svaka promjena koju unesemo odrazie se na sva mesta na
kojima se kd izvrava. Koristei funkcije smanjujemo glavni dio kda u aplikaciji, zato to se sporedni delovi
izvravaju izvan glavnog.
II - 3 - 1. Definisanje i koritenje funkcija
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
class Program {
static void Main(string[] args {
Write();
Console.ReadKey();
}
static void Write() {
Slika 7. Rezultat izvravanja funkcije programa
Dino Dedi 16
Maturski rad Veb prezentacija programskog jezika C#
Console.WriteLine("Dobar dan");
Console.WriteLine("Ovo je tekst iz funkcije.");} }
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
II - 3 - 2. Povratne vrijednosti
Najjednostavniji nain za razmjenu podataka sa funkcijom jeste koritenje povratne vrijednosti. Povratne
vrijednosti kao i promenljive imaju svoj tip. Npr. moemo imati funkciju sa imenom getString() ija je povratna
vrijednost tipa string. To moemo koristiti u kodu na sljedei nain:
string mojString;
mojString = getString() ;
Povratne vrijednosti su obino rezultat prorauna izvedenog unutar funkcije. Kada doe do iskaza return,
izvravanje programa se vraa na pozivajui kd. Redovi unutar funkcije koji se nalaze iza ovog iskaza nee biti
izvreni. To ne znai da se return mora postaviti na kraj funkcije. Iskaz return moemo koristiti prije toga.
II - 3 - 3. Parametri
Kada funkcija treba da prihvati parametre, moramo navesti listu parametara koje funkcija prihvata, (zajedno
sa njihovim tipovima unutar definicije funkcije) i odgovarajuu listu parametara u svakom pozivu funkcije. Npr.
prosta funkcija moe imati dva parametra tipa double i vratiti njihov proizvod:
static double product (double param1, double param2) {
return param1 * param2;
}
II - 3 - 4. Nizovi parametara
C# nam dozvoljava da definiemo samo jedan poseban parametar za funkciju. Ovaj parametar poznat je
kao niz parametara. Nizovi parametara dozvoljavaju nam da pozivamo funkcije koristei promenljivu koliinu
parametara, a definisani su kljunom rei params.
Nizovi parametara mogu biti korisni za pojednostavljivanje koda, jer ne moramo prosljeivati nizove iz
naeg pozivajueg koda. Sljedei kd je potreban da bi se definisala funkcija koja koristi niz parametara:
static <returnType> <functionName>(<p1Type><p1Name>, . . . , params <type> []
<name>) {
.....
.....
return <returnValue>;
}
Ovdje su <val1>, <val2> vrijednosti tipa <type> koji je koriten da bi se inicijalizovao niz <name>. Ne postoji
ogranienje u broju parametara koje moemo navesti, jedino ogranienje je da su svi tipa <type>.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
class Program
{
static int sumProm(params int[] vals) {
int sum = 0;
foreach (int prom in vals) {
sum += prom; Slika 8. Rezultat izvravanja funkcije
} kojoj se prosljeuju nizovi parametara
return sum;
}
static void Main(string[] args) {
Dino Dedi 17
Maturski rad Veb prezentacija programskog jezika C#
II - 3 - 6. Izlazni parametri
Moemo definisati da je dati parametar izlazni parametar, preko kljune rei out koja se koristi na isti nain
kao i kljuna re ref (kao modifikator parametra u definiciji funkcije, i pri njenom pozivanju). Rezultat toga je isto
ponaanje kao i kod referentnog parametra, u smislu da se vrijednost parametra na kraju funkcije vraa
promjenjivoj koja je upotrebljena u njenom pozivu. Meutim, postoje i vane razlike. Dok za parametre tipa ref
nije dozvoljeno koristiti promjenljive kojima nije dodijeljena vrijednost, kod parametara out to moemo raditi.
Pored toga, out parametar se mora tretirati kao da mu nije dodijeljena vrijednost od strane funkcije koja ga koristi.
Dino Dedi 18
Maturski rad Veb prezentacija programskog jezika C#
To znai da, iako je dozvoljeno koristiti promjenljivu kojoj je dodijeljena vrijednost kao izlazni parametar, vrijednost
koju ona sadri u pozivu funkcije biti e izgubljena nakon izvrenja te funkcije.
Na primer, razmotrite proirenje funkcije MaxVrednost() koja vraa najveu vrijednost u nizu. Izmijenit
emo funkciju tako da vrati indeks elementa sa najveom vrijednosti unutar niza. Da bi bilo jednostavnije vratit
emo samo indeks prve pojave najveeg elementa, ukoliko ih ima vie. Da bismo ovo uradili dodajemo izlazni
parametar mijenjajui funkciju na sljedei nain:
static int MaxVrijednost(int[] intArray, out in maxIndex) {
int maxProm = intArray [0];
maxIndex =0;
for (int i = 1; i < intArray.Length; i++)
{
if (intArray[i] > maxProm)
}
maxProm = intArray [i] ;
maxIndex = i;
return maxProm;
}
Moemo koristiti funkciju na sljedei nain:
int [] myArray = (1, 8, 3, 6, 2, 5, 9, 3, 0, 2);
int maxIndex
Console.Write("Maksimalna vrijednost u nizu myArray je {0)", MaxVrijednost(myArray, out maxIndex);
Console.WriteLine{"Maksimalna vrijednost niza je (0) element u nizu", maxindex+1);
Rezultat ovoga je:
Maksimalna vrednost u nizu myArray je 9
Maksimalna vrednost niza je 7 element u nizu
Ovde je vano naglasiti da se kljuna rije out mora upotrijebiti u pozivu funkcije, ba kao i kljuna rije ref.
Upamtite daje vrijednosti maxIndex dodato jedan, i vraa se ovde dok je ispisujemo na ekran. To je zato da bismo
indeks preveli u razumljiviji oblik, tako da se prvi element u nizu ne oznaava sa 0 ve sa 1.
II - 3 - 7. Opseg vaenja promjenljive
Moda ste se upitali zato je uopte potrebna razmjena podataka sa funkcijama. Razlog je taj to se
promjenljivama u C#-u moe pristupiti samo iz lokalnih regiona koda. Za datu promjenljivu kae se da ima opseg
vaenja unutar koga joj se moe pristupiti. Opseg vaenja promjenljive je vana tema i najbolje emo je predstaviti
preko primjera..
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
class Program {
static void Write() {
string mojString = "Sada definisan je u Write()";
Console.WriteLine("Sada je u Write()");
Console.WriteLine("mojString = ", mojString);
}
static void Main(string[] args) {
string mojString = "Sada je definisan u Main().";
Write();
Console.WriteLine("");
Console.WriteLine("Sada je u Main().");
Console.WriteLine("mojString = ", mojString);
Console.ReadKey();
}
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Operacije koje izvodi ovaj kd su sledee:
Main() definie i inicijalizuje
promjenjivu tipa string sa imenom
mojString.
Main() prebacuje kontrolu na
Slika 9. Rezultat izvravanja funkcije i opseg vaenja
funkciju Write(). promjenljive
Write() definie i inicijalizuje
Dino Dedi 19
Maturski rad Veb prezentacija programskog jezika C#
promjenjivu tipa string sa imenom mojString, koja nije isto to i promjenjiva mojString
definisana u funkciji Main().
Write() ispisuje niz znakova na konzolu koji sadri vrijednost mojString definisan unutar
funkcije Write().
Write() vraa kontrolu funkciji Main().
Main() ispisuje na konzolu vrijednost koju sadri mojString definisan unutar funkcije
Main().
Promjenljive iji opseg vaenja na ovaj nain pokriva samo jednu funkciju, poznate su kao lokalne
promenljive. Takoer je mogue imati globalne promenljive, iji opseg vaenja pokriva vie funkcija. Izmjenite kd
na sljedei nain:
class Class1 {
static string mojString;
static void Write() {
string mojString = "Sada je definisan u Write()";
Console.WriteLine("Sada je u Write()");
Console.WriteLine("Lokalna mojString = String definisan u Write()", mojString);
Console.WriteLine("Globalna mojString = Globali string", Class1.mojString);
}
static void Main(string[] args) {
string mojString = "Sada je definisan u Main().";
Write();
Console.WriteLine("");
Console.WriteLine("Sada je u Main().");
Console.WriteLine("Lokalna mojString = String definisan u Write()", mojString);
Console.WriteLine("Globalna mojString = Globali string", Class1.mojString);
Console.ReadKey();
}
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Ovde smo dodali jo jednu promjenljivu pod imenom mojString, ovaj put na viem nivou hijerarhije imena.
Ova promjenljiva je definisana na sljedei nain:
static string mojString;
Primjetiete da opet koristimo kljunu re static. U konzolnim aplikacijama, prilikom navoenja globalnih
promjenjivih u ovom obliku, moramo koristiti kljune rei static ili const. Ako elimo da mijenjamo vrijednost
globalne promjenljive, moramo navesti static, jer const zabranjuje mijenjanje vrijednosti promjenljive.
Da bismo napravili razliku izmeu ove promjenljive i lokalnih promjenjivih istog imena u funkcijama Main() i
Write(), moramo se obratiti promjenljivoj koristei puno kvalifikovano ime. Ovde se globalnoj promjenljivoj
obraamo sa Class1.mojString. To je neophodno samo kada imamo globalne i lokalne promjenljive sa istim
imenom.
II - 3 - 8. Opseg vaenja promenljive u drugim strukturama
Opseg vaenja promjenljivih ukljuuje blok koda u kom su definisane i bilo koje direktno ugnijedene
blokove koda. To se odnosi i na druge blokove koda, kao to su grananja i petlje.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
class class1 {
static void Main(string[] args) {
int i;
string text = " ";
Dino Dedi 20
Maturski rad Veb prezentacija programskog jezika C#
Parametar args funkcije Main() je metod za prihvatanje informacija izvan aplikacije, navedenih u toku
izvrenja programa. Ova informacija uzima oblik parametara komandne linije.
Kada izvravamo aplikaciju preko komandne linije, esto smo u mogunosti da direktno navedemo
informaciju kao to je datoteka koja se uitava u izvrenju aplikacije. Npr. pogledajte aplikaciju Notepad u
Windowsu. Moemo je pokrenuti tako to upiemo notepad u komandnu liniju, ili u okviru prozora koji se
pojavljuje kada odaberemo opciju Run iz Windows menija Start. Takoe, moemo uneti neto nalik na notepad
"myfile.txt" na ovim lokacijama. Rezultat e biti to da e Notepad uitati datoteku "myfile.txt" kada se pokrene, ili
e ponuditi da napravi ovu datoteku. Ovde je "myfile.txt" argument komandne linije. Moemo napisati konzolnu
aplikaciju koja radi na slian nain koristei parametar args.
Kada se konzolna aplikacija pokrene, svaki parametar komandne linije koji je naveden smeta se u niz args.
Zatim te parametre moemo koristiti u aplikaciji.
Funkcije lanice struktura
Tip struct slui za smjetanje razliitih elemenata podataka na jedno mesto. Strukture su sposobne i za
mnogo vie od toga. Vana dodatna sposobnost koju nude jeste mogunost da sadre funkcije isto kao i podatke.
Ovo na prvi pogled moe djelovati udno, ali je u stvari izuzetno korisno.
Npr. pogledajmo sljedeu strukturu:
struct ImeKupac
{
public string Ime, Prezime;
}
Ako imamo promjenljivu tipa ImeKupac, a elimo da ispiemo njeno puno ime na konzoli, morat emo da
napravimo ime iz sastavnih delova. Moemo koristiti sledeu sintaksu za promenljivu tipa ImeKupac sa imenom
kupac, na primer:
ImeKupac mojKupac;
mojKupac.Ime = "Petar";
mojKupac.Prezime = "Petrovi";
Console.WriteLine("{0} {1} ", kupac.Ime, kupac.Prezime);
Dodajui funkciju strukturi, ovo moemo pojednostaviti tako to emo centrirati obradu standardnih
zadataka kao to je ovaj. Toj strukturi moemo dodati odgovarajuu funkciju na sledei nain:
struct ImeKupac
{
public string Ime, Prezime;
public string ImePrezime() {
return Ime + " " + Prezime;
}
}
Ovo lii na bilo koju funkciju koju smo do sada vidjeli, osim to nije koriten modifikator static. Treba znati
da ova kljuna re nije potrebna za funkcije lanice struktura. Tu funkciju moemo koristiti na sljedei nain:
ImeKupac mojKupac;
mojKupac.Ime = "Petar";
mojKupac.Prezime = "Petrovi";
Console.WriteLine (kupac.ImePrezime());
Dino Dedi 22
Maturski rad Veb prezentacija programskog jezika C#
referencu na bilo koju funkciju koja ima isti potpis kao i delegat. Kada to uradimo, moemo pozvati funkciju
koristei promenljivu delegata kao da je funkcija.
Kada imamo promjenjivu koja pokazuje na funkciju, moemo izvesti druge operacije koje bi bilo nemogue
izvesti nekom drugom metodom. Npr. moemo proslijediti delegat nekoj funkciji kao parametar, zatim ta funkcija
moe pomou delegata pozvati funkciju na koju on ukazuje, ne znajui koja e to funkcija biti sve do izvrenja.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
class Class1
{
delegate double procesDelegati (double param1, double param2);
static double Pomnozi(double param1, double param2) {
return param1 * param2;
}
static double Podjeli(double param1, double param2) {
return param1 / param2;
}
static void Main(string[] args) {
procesDelegati process;
Console.WriteLine("Dobar dan.");
Console.WriteLine("Unesite dva broja odvojena zarezom.");
string ulaz = Console.ReadLine();
int pozZareza = ulaz.IndexOf(" , ");
double param1 = Convert.ToDouble(ulaz.Substring(0,pozZareza));
double param2 = Convert.ToDouble(ulaz.Substring(pozZareza + 1, ulaz.Length-pozZareza - 1));
Console.WriteLine(" Pritisnite taster M za mnoenje ili taster D za djeljenje.");
ulaz = Console.ReadLine();
if (ulaz == "N") {
process = new procesDelegati(Pomnozi);
Console.WriteLine("Rezultat je : (0}", process(param1, param2));
}
else
if (ulaz == "D") {
process = new procesDelegati(Podjeli);
Console.WriteLine("Rezultat je : (0}", process(param1, param2));
}
else
Console.WriteLine("Utipkali ste pogresnu tipku, pokusajte ponovo.");
}
}
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 13. prosljediti delegat nekoj funkciji kao parametar, zatim ta funkcija moe
pomou delegata pozvati funkciju na koju on ukazuje
II - 3 - 11. Dogaaji
ta je dogaaj?
Dogaaji su slini izuzetcima u tome to su aktivirani od strane objekata, a mi moemo obezbjediti kd koji
reaguje na njih. Meutim, postoje i neke razlike. Jedna od najvanijih je da nema ekvivalentne try. . . catch
strukture za obradu dogaaja. Umesto toga, moramo se prijaviti na dogaaj. Prijavljivanje na dogaaj
podrazumjeva pisanje koda koji e se izvriti kada je dogaaj aktiviran, u obliku rutine za obradu dogaaja.
Dogaaj moe imati vie rutina za obradu dogaaja, koje e sve biti pozvane kada je dogaaj aktiviran.
Rutine za obradu dogaaja mogu biti dio iste klase kojoj pripada objekat koji aktivira dogaaj, a mogu pripadati i
nekim drugim klasama. Rutine za obradu dogaaja su jednostavne funkcije. Jedina restrikcija za ove funkcije jeste
ta da se potpis (tip podatka koji se vraa i parametri) mora podudarati sa onim to zahtjeva dogaaj. Ovaj potpis je
dio definicije dogaaja odreen od strane delegata.
Dino Dedi 23
Maturski rad Veb prezentacija programskog jezika C#
Creates
Application Connection
Drugo - aplikacija se prijavljuje na dogaaj. Ovo bismo mogli postii definisanjem funkcije koja bi se koristila
sa delegat tipom koji je odredio dogaaj i koja bi imala parametar - referencu na dogaaj. Rutina za obradu
dogaaja moe biti metoda na nekom drugom objektu. Neka to bude, npr. objekt koji predstavlja ureaj za prikaz
instant poruke.
Application Connection
Creates
Subscribes to
Display
Kada je dogaaj aktiviran, aplikacija je obavjetena. Kada stigne instant poruka kroz objekat veze, bude
pozvana rutina za obradu dogaaja na ureaju za prikaz. Poto koristimo standardnu metodu, objekt koji aktivira
dogaaj moe proslijediti kroz parametre bilo koju relevantnu informaciju pravei tako raznovrsne dogaaje. U
naem sluaju, jedan parametar moe biti tekst iz instant poruke. Ovaj tekst moe se prikazati pomou rutine za
obradu dogaaja na ureaju za prikaz.
Application Connection
Creates
Display
Calls
Pozdrav
Koritenje dogaaja
Za obradu dogaaja neophodno je prijaviti dogaaj, to znai obezbjediti rutinu za obradu dogaaja iji se
potpis podudara sa delegatom koji koristi dogaaj. Pogledajmo primjer koji koristi jednostavan objekat Timer koji
aktivira dogaaj, posle ega e biti pozvana rutina za obradu dogaaja.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
namespace Dogadjaji1 {
class Calss1 {
static int brojac = 0;
static string displayString ="Ovo je string koji se ponavlja poslije zavrsetka prikaza teksta, a prekida
poslije 100 milsec.";
static void Main(string[] args) {
Timer mojTimer = new Timer(100);
mojTimer.Elapsed += new ElapsedEventHandler(WriteChar);
mojTimer.Start();
Console.ReadLine();
}
static void WriteChar(object source, ElapsedEventHandler e) {
Dino Dedi 24
Maturski rad Veb prezentacija programskog jezika C#
Console.Write(displayString[brojac++ % displayString.Length]);
}
}
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 14. Za obradu dogaaja neophodno je prijaviti dogaaj, to znai obezbjediti rutinu za obradu dogaaja iji se
potpis podudara sa delegatom koji koristi dogaaj
Definisanje dogaaja
Pogledajmo kako da definiemo i koristimo nae sopstvene dogaaje. Implementirat emo verziju primjera
za instant poruke. Kreiraemo objekat Konekcija koji aktivira dogaaje obraene od strane objekta Display.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
namespace Dogadjaji2 {
public delegate void MessageHandler(string messageText);
public class Konekcija {
public event MessageHandler MessageArrived;
private Timer pollTimer;
public Konekcija() {
pollTimer = new Timer(100);
pollTimer.Elapsed += ElapsedEventHandler(PromjeraPoruke);
}
public void Connect() {
pollTimer.Start();
}
public void Disconnect() {
pollTimer.Stop();
}
static void PromjeraPoruke(object source, ElapsedEventHandler e) {
Console.WriteLine("Provjera nove poruke.");
Random random = new Random();
if ((random.Next(9) == 0) && (MessageArrived != null)) {
MessageArrived("#### Pozdrav MAMA ####");
}
}
}
}
Dodajte novu klasu Display u Display.cs:
namespace Dogadjaji2 {
public class Display {
public void DisplayMessage(string poruka) {
Console.WriteLine("Poruka koj je stigla : ", poruka);
}
}
Izmjenite kodu Class1.cs:
{
class Class1 {
static void Main(string[] args) {
Konekcija mojaKonekcija = new Konekcija();
Display myDisplay = new Display();
mojaKonekcija.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);
mojaKonekcija.Connect();
Console.ReadLine();
}
}
}
Dino Dedi 25
Maturski rad Veb prezentacija programskog jezika C#
Slika 15. Objekat Konekcija aktivira dogaaje obraen od strane objekta Display
Vienamjenske rutine za obradu dogaaja
Potpis koji smo videli ranije za dogaaj Timer.Elapsed, sadri dva parametra iji se tipovi esto sreu u
rutinama za obradu dogaaja. Ti parametri su:
object source - referenca na objekat koji aktivira dogaaj.
ElapsedEventArgs e - parametri koje alje dogaaj.
Razlog zbog kojeg koristimo parametar tipa object za ovaj dogaaj, kao i za mnoge druge dogaaje, je to
emo esto htjeti da koristimo jednu rutinu za obradu dogaaja za vie identinih dogaaja aktiviranih od strane
razliitih objekata. Na ovaj nain moemo tano znati koji objekt aktivira dogaaj.
Da biste probali jednostavan ispis na ekranu, u okviru velikih zgrada upiite tekst tano kao to je prikazano:
using System;
namespace Dogadjaji3 {
public class MessageAmvedEventArgs : EventArgs {
private string poruka;
private string Poruka; {
get {
return poruka;
}
}
public class MessageAmvedEventArgs() {
Poruka = "Niti jedna poruka nije poslata;
}
public class MessageAmvedEventArgs(string novaPoruka){
poruka =novaPoruka;
}
}
}
Izmjenite Connection.cs:
using System.Text;
using System.Timers;
namespace Dogadjaji3 {
public delegate void MessageHandler(Konekcija source, MessageArrivedEventArgs e);
public class Konekcija {
public event MessageHandler MessageArrived;
private string naziv;
private string Naziv; {
get {
return naziv;
}
Set {
naziv = value;
}
}
private Timer pollTimer;
public Konekcija() {
pollTimer = new Timer(100);
pollTimer.Elapsed += ElapsedEventHandler(PromjeraPoruke);
}
public void Connect() {
pollTimer.Start();
Dino Dedi 26
Maturski rad Veb prezentacija programskog jezika C#
}
public void Disconnect() {
pollTimer.Stop();
}
static void PromjeraPoruke(object source, ElapsedEventHandler e) {
Console.WriteLine("Provjera nove poruke.");
Random random = new Random();
if ((random.Next(9) == 0) && (MessageArrived != null)) {
MessageArrived(this, new MessageArrivedEventArgs "#### Pozdrav MAMA
####");
}
}
}
}
Izmjenite Display.cs:
namespace Dogadjaji3 {
public class Display {
public void DisplayMessage(Konekcija source, MessageArrivedEventArgs e) {
Console.WriteLine("Poruka koj je stigla : ", source.Naziv);
Console.WriteLine("Tekst poruke : ", e.Poruka);
}
}
Izmjenite Class1.cs:
static void Main(string[] args) {
Konekcija mojaKonekcija1 = new Konekcija();
mojaKonekcija1.naziv = "Prva konekcija.";
Konekcija mojaKonekcija1 = new Konekcija();
mojaKonekcija2.naziv = "Druga konekcija.";
Display myDisplay = new Display();
mojaKonekcija1.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);
mojaKonekcija2.MessageArrived += new MessageHandler(myDisplay.DisplayMessage);
mojaKonekcija1.Connect();
mojaKonekcija2.Connect();
Console.ReadLine();
}
}
}
Ako je kd ispravno napisan, pojavljuje se prozor komandne linije sa ispisanim tekstom:
Slika 16. rutinu za obradu dogaaja za vie identinih dogaaja aktiviranih od strane
razliitih objekata
Povratne vrijednosti i rutina za obradu dogaaja
Svi moduli koje smo do sada vidjeli imali su povratni tip void. Mogue je obezbjediti neki drugi tip, ali to
dovodi do problema zato to neki dogaaj moe imati za posljedicu pozivanje nekoliko rutina za obradu dogaaja.
Ako sve ove rutine vrate neku vrijednost postaje nejasno koju od vrijednosti uzimamo.
Sistem rjeava problem tako to dozvoljava pristup samo posljednjoj vraenoj vrijednosti. Ovo je vrijednost
koju vraa posljednja rutina za obradu dogaaja koja se odnosi na neki dogaaj.
Dino Dedi 27
Maturski rad Veb prezentacija programskog jezika C#
Server Explorer, a predstavljen je ikonama na kojoj su nacrtani raunari, iznad jezika kartice Toolbox. Ovo se moe
posmatrati i kao kraa verzija Windows Control Panela. Odavde moete pretraivati mreu, dodavati ili uklanjati
veze sa bazama podataka i jo mnogo toga drugog.
Sa desne strane prozora nalaze se dva panela. Gornji je Solution Explorer i pregled klasa. U Solution
Explorer-u moete vidjeti sve otvorene projekte i njihove pridruene datoteke. Ako pritisnete na karticu pri dnu
Solution Explorer-a, aktivirate Class Viewer (pregled klasa). Ovdje moete pregledati sve klase koritene u
projektima, kao i sve izvedene klase. U donjem desnom dijelu prozora nalazi se panel Properties. Ovaj panel sadri
sva svojstva izabranog objekta, koja se lako mogu proitati ili izmeniti, tj. dopuniti.
Takoe, u ovom panelu vidi se i kartica Dynamic Help. Ovde se prikazuju svi savjeti i uputstva za izabrani
objekt ili kd, ak i dok tipkate.
III - 1 - 2. Okvir sa alatima
Pogledajmo malo bolje okvir sa alatima - Toolbox. Ako ve to
niste uradili, pomjerite pokaziva mia do okvira na lijevoj strani
ekrana, i pritisnite pin u gornjem desnom uglu panela, tako da cijeli
panel bude vidljiv.
Ako sluajno pritisnete umesto pribadae i tako uklonite okvir
sa alatima, moete ga ponovo vratiti u prozor. Izaberite Toolbox iz
menija View, ili pritisnite tastere Ctrl+Alt+X.
Object
MarshalByRefObject
Component
Control
Osobine
Sve kontrole imaju odreene osobine koje odreuju kako e se neka kontrola ponaati. Osnova klasa za
veinu kontrola Control sadri odreen broj svojstava koje kontrole ili direktno nasleuju ili redefiniu u sluaju da
se eli neko drugaije ponaanje kontrole.
Tabela ispod pokazuje najvanije osobine klase Control.
Dino Dedi 29
Maturski rad Veb prezentacija programskog jezika C#
Ove dvije osobine su naroito korisne kada dizajnirate obrazac. Osigurati da prozor normalno izgleda poslije
promjene veliine prozora nije lako. Mnogi programi rjeavaju ovaj problem tako to ne dozvoljavaju da se mijenja
veliina prozora. Svojstva Anchor i Dock omoguavaju vam da rijeite ovaj problem bez pisanja koda. Svojstvo
Anchor odreuje kako se kontrola ponaa kada korisnik promijeni veliinu prozora u kojem se kontrola nalazi.
Svojstvo Dock je povezano sa svojstvom Anchor. Odreuje da li kontrola treba da bude pripojena uz ivicu prozora
kojem pripada. Ukoliko korisnik promijeni veliinu prozora, kontrola e i dalje biti pripojena uz ivicu.
Dogaaji
Kada korisnik programa pritisne dugme ili taster, programer bi htio da zna da se to zaista desilo. Da bi ovo
bilo mogue kontrole koriste dogaaje. Klasa Control definie brojne dogaaje koji su zajedniki za kontrole.
Tabela ispod opisuje neke od ovih dogaaja MSDN biblioteka :
Dino Dedi 30
Maturski rad Veb prezentacija programskog jezika C#
Opisat emo osobine kao lanove klase Button. Samo one najee koritene opisane su u tabeli.
Najkoriteniji dogaaj dugmeta jeste dogaaj Click. Deava se kada korisnik pritisne na dugme. Takoe, do
dogaaja Click dolazi kada je dugme u fokusu i kada korisnik pritisne taster Enter. Ako imate dugme na formularu,
uvijek treba obraditi ovaj dogaaj.
Dino Dedi 31
Maturski rad Veb prezentacija programskog jezika C#
Dino Dedi 32
Maturski rad Veb prezentacija programskog jezika C#
Ime Opis
Ovaj dogaaj se alje kada se mijenja potvrda radio dugmeta. Ako ima vie kontrola RadioButton na
CheckChanged formularu ili unutar jednog grupnog okvira ovaj dogaaj se alje dva puta: prvo kontroli koja je bila
potvrena, a sada vie nije, a zatim i kontroli koja postaje potvrena.
Click Ovaj dogaaj se alje svaki put kada se pritisne na radio dugme. Ovo nije isto kao i dogaaj
CheckChanged.
Osobine i dogaaji ove kontrole su slini onima za RadioButton ali tu su i dvije nove:
Ime osobine Dostupnost Opis
Polje za potvrdu moe imati tri statusa: Checked, Indeterminate i Unchecked
CheckState itanje/upis
(potvreno, neodreeno i nepotvreno).
Ako je ovo svojstvo podeeno na false korisnik nee moi da izmijeni status kontrole
ThreeState itanje/upis
na Indeterminata, ali moe izmijeniti status u kodu.
Ime Opis
CheckedChanged Deava se kada se mijenja svojstvo Checked kontrole. Kod kontrola sa osobinom ThreeState
podeenom na true mogue je pritisnuti na polje za potvrdu bez promene Checked osobine.
Deava se kada se mijenja svojstvo CheckedState kontrole. Kako su Checked i Unchecked mogue
CheckedStateChanged vrijednosti za svojstvo CheckedState, ovaj dogaaj e biti poslan uvijek kada se mijenja svojstvo
Checked.
RichTextBox ima nove osobine. Sljedea tabela opisuje neke najee koritene osobine:
Ime osobine Dostupnost Opis
Vrijednost ove osobine je true, ako neto to je poniteno moe biti
CanRedo Samo itanje
ponovljeno, u suprotnom je false.
Dino Dedi 33
Maturski rad Veb prezentacija programskog jezika C#
Veina dogaaja koji se koriste u obogaenim okvirima za tekst isti su kao i za obine okvire za tekst. Ima i
nekoliko novih:
Sve osobine opisane u tabeli koja slijedi vae i za ListBox i za CheckedListBox, osim ako nije drugaije
naznaeno:
Dino Dedi 34
Maturski rad Veb prezentacija programskog jezika C#
Tabela koja slijedi opisuje samo najee koritene metode. Metode vae i za kontrolu ListBox i za
CheckedListBox osim ako nije drugaije naznaeno:
Ime Opis
ClearSelected Ponitava izbor u okviru liste.
FindString Pronalazi prvi string u listi koji poinje eljenim stringom.
FindstringExact Kao i FindString s tim to se kompletan string mora podudarati.
GetSelected Vraa vrijednost koja pokazuje da li je element izabran ili nije.
SetSelected Podeava da element bude izabran ili brie element iz liste izabranih elemenata.
ToString Vraa trenutno izabrani element.
GetltemChecked Samo za kontrolu CheckedListBox: vraa vrijednost koja pokazuje da li je elemant
potvren ili ne.
SetltemCheckState Samo za kontrolu CheckedListBox: vraa vrijednost koja pokazuje stanje
elemenata.
SetltemChecked Samo za kontrolu CheckedListBox: podeava odreeni element tako da bude
potvren.
SetltemCheckState Samo za kontrolu CheckedListBox: podeava stanje elementa.
Dogaaji kojih elite da budete svjesni dok radite sa kontrolama ListBox i CheckedListBox jesu oni
dogaaji koji se odnose na izbor korisnika:
Ime Opis
ItemCheck Samo za kontrolu CheckedListBox: deava se prilikom mijenjanja stanja elementa.
SelectedlndexChanged Deava se prilikom mjenjanja indeksa izabranog elementa.
Kako kontrola ComboBox posjeduje mogunosti kontrola TextBox i ListBox, mnoge osobine kombinovanog
okvira mogu se nai i u dvije pomenute kontrole. Zbog ovoga postoji ogroman broj svojstava i dogaaja kontrole
ComboBox.
Pokazuje da li je lista prikazana ili nije. Ako podesite ovu osobinu na true, lista e se
DropDown itanje/upis
prikazati.
Items Samo itanje Kolekcija koja sadri sve elemente liste iz kombinovanog okvira.
Podeavanjem ove osobine na broj vei od nule, odreujete maksimalan broj
MaxLength itanje/upis
karaktera koji je mogue uneti u tekstualni dio kontrole.
Selectedlndex itanje/upis Pokazuje indeks trenutno izabranog elementa liste.
Selectedltem itanje/upis Pokazuje trenutno izabrani element liste.
SelectedText itanje/upis Predstavlja tekst koji je izabran u tekstualnom dijelu kontrole.
Predstavlja indeks prvog karaktera dijela teksta koji je izabran u tekstualnom dijelu
SelectionStart itanje/upis
kontrole.
SelectionLength itanje/upis Predstavlja duinu izabranog teksta u tekstualnom dijelu kontrole.
Ako podesite ovu osobinu na true kontrola e sortirati elemente liste po
Sorted itanje/upis
abecednom redu.
Ako podesite ovu osobinu na vrednost null nita nee biti izabrano. Ako podesite na
Text itanje/upis vrijednost koja postoji u listi ta vrijednost e biti izabrana. Ako traena vrijednost
ne postoji u listi tekst e biti prikazan u tekstualnom dijelu kontrole
Dino Dedi 36
Maturski rad Veb prezentacija programskog jezika C#
Checkedlterns potvreni.
Kontrola ListView moe imati kolone. Ovo svojstvo obezbeuje pristup kolekciji
Columns Samo itanje
kolona kroz koju moete dodavati ili uklanjati kolone.
Focusedltem Samo itanje Ovo svojstvo sadri element koji ima fokus. Ako nita nije izabrano, vrednost je nula.
Ako je ovo svojstvo podeeno na true, kada se pritisne na neki element, onda e cijeli
FullRowSelect itanje/upis red u kom se element nalazi biti naglaen. Ako je podeenona false samo e element
biti naglaen.
Podeavanjem ove osobine na true pokazat e se linije mree izmeu redova i kolona.
GridLines itanje/upis
Podeavanje ove osobine ima efekta samo ako je svojstvo view podeeno na Details.
Moete kontrolisati kako e biti prikazano zaglavlje kolone. Postoje tri stila:
- Clickable: zaglavlje kolone se ponaa kao dugme.
HeaderStyle itanje/upis
- NonClickable: zaglavlje kolone ne reaguje na pritisak miem.
- None: zaglavlja kolona nisu prikazana.
Kada je ovo svojstvo podeeno na true korisnik moe izabrati element postavljanjem
HoverSelection itanje/upis
mia na element.
Kada je vrijednost ovog svojstva podeena na true korisnik moe ureivati sadraj
LabelEdit itanje/upis
prve kolone u prikazu Details.
Kada je ovo svojstvo podeeno na true oznake e se protezati na koliko god je redova
LabelWrap itanje/upis
potrebno za prikazivanje cijelog teksta.
Klasa ListViewltem
Element liste je uvijek objekat klase ListViewltem. Klasa ListViewltem sadri informacije kao to su tekst i
indeks ikone koje treba prikazati. Sadri kolekciju koja se zove SubItems. Ova kolekcija sadri objekte klase
ListViewSubItems. Ovi podelementi su prikazani ako je kontrola ListView u reimu Details. Svaki od podelemenata
predstavlja kolonu. Osnovna razlika izmeu elementa i podelementa jeste ta to podelement ne moe prikazati
ikonu.
Klasa ColumnHeader
Za prikazivanje zaglavlja kolona dodajete objekte klase ColumnHeader kontroli ListView kroz kolekciju
Columns. Klasa ColumnHeader obezbjeuje zaglavlje za kolone koje e se prikazati kada je ListView u reimu
Details.
III - 1 - 3 - 12. Kontrola ImageList
Kontrola ImageList obezbjeuje kolekciju koja se koristi za smetanje slika koje mogu biti koritene u
drugim kontrolama. U liste slika mogu se stavljati slike bilo koje veliine, s tim da se u okviru jedne kontrole mogu
nai samo slike iste veliine. U sluaju kontrole ListView potrebne su dvije kontrole ImageList za smetanje malih i
velikih slika. ImageList ne prikazuje svoj sadraj u vrijemenu izvravanja programa. Kada dovuete ovu kontrolu na
formular za vrijeme dizajniranja, ona ne postaje dio samog formulara ve se nalazi u bloku ispod formulara koji
smeta sve sline objekte. Ovo zanimljivo svojstvo ne doputa kontrolama koje nisu dio grafikog interfejsa da
zatrpavaju dizajner formulara. Kontrolom ImageList se rukuje kao i svakom drugom kontrolom, ali je ne moete
pomerati.
Dino Dedi 37
Maturski rad Veb prezentacija programskog jezika C#
Moete podesiti svojstvo Text statusne linije za prikazivanje nekog teksta ali je mogue praviti panele u iste
svrhe:
Ime osobine Dostupnost Opis
Backgroundlmage itanje/upis Mogue je dodijeliti sliku statusnoj liniji koja e se iscrtati u pozadini.
Ovo je kolekcija panela u statusnoj liniji. Koristite ovu kolekciju za dodavanje i
Panels itanje/upis
uklanjanje panela.
ShowPanels itanje/upis Ako hoete da prikaete panele ovo svojstvo mora biti podeeno na true.
Kada ne koristite panele ovo svojstvo sadri tekst koji e se prikazati na
Text itanje/upis
statusnoj liniji.
Nema mnogo novih dogaaja za statusnu liniju, ali ako crtate panel runo dogaaj DrawItem je od velike
vanosti:
Ime Opis
Deava se kada panel sa OwnerDraw stilom treba ponovo iscrtati. Morate prijaviti ovaj dogaaj
DrawItem
ako elite sami da crtate sadraj panela.
PanelClick Deava se prilikom odabira panel.
Klasa StatusBarPanel
Svaki panel u statusnoj linije je objekat klase StatusBarPanel. Ova klasa sadri informacije o svim panelima
kolekcije Panels. Moe se podeavati tekst, poloaj teksta u panelu, ikone ili stil panela. Ako elite sami da crtate
panel morate podesiti svojstvo panela Style na OwnerDraw i obraditi dogaaj DrawItem kontrole StatusBar.
III - 1 - 3 - 14. Kontrola TabControl
Kontrola TabControl obezbjeuje lagan nain organizovanja dijaloga u logike jedinice kojima se moe
pristupiti kroz jezike kartica na vrhu kontrole. Kontrola TabControl sadri kontrole TabPages koje su sline
grupnim okvirima.
Postoje dva reda koja sadre jezike kartica u vrhu kontrole. Pritiskom na bilo koji od njih prikazat e se
drugaija selekcija kontrola u ostatku dijaloga. Ovo je dobar primejr kako grupisati informacije koje su u nekoj vezi
jedna s drugom pa tako olakavajui korisniku da pronade eljenu informaciju. Koritenje kontrole TabControl je
veoma lako. Jednostavno dodate jezike za kartice koje elite prikazati u kolekciju TabPages, a zatim ubacujete
ostale kontrole u odgovarajue strane.
Svojstva kontrole TabControl
Osobine kontrole TabControl se uglavnom koriste za podeavanje izgleda kontenjera u kome se nalaze
kontrole TabPages tj. za izgled kartica:
Dino Dedi 38
Maturski rad Veb prezentacija programskog jezika C#
III. Zakljuak
C# je objektno orjentisan programski jezik kojeg su razvili Andres Hejlsberg i drugi pripadnici Microsoft
firme. C# je evolucija C i C++ programskog jezika. U odnosu na C i C++ sintaksa C# je dosta prostija, greke je
jednostavnije otkloniti i sam kod je dosta razumljiviji.
Prema TIOBE-ovoj statistici C# je rangiran na 5. mjesto kao jedan od koritenijih programskih jezika, dok C i
C++ zauzimaju prva tri mjesta.
Ovaj maturski rad je obuhvatio samo dio onoga to programski jezik C# i .NET Framework pruaju. Sam
framework sadri hiljade klasa koje moete iskoristiti u svojim programima. Za detaljan opis svih klasa, njihovih
metoda te moguih naina upotrebe, trebalo bi biti napisane desetine hiljada stranica. Sam jezik C# nudi jo puno
elemenata i metoda koje vam mogu olakati posao programiranja. Posao programera zahtijeva konstantno uenje i
usavravanje, razumijevanje kako odreene mogunosti mogu olakati ivot, ali u nekim sluajevima i oteati.
Samo razumijevanje programerskih ideja, algoritama i principa, predstavlja samo poetni korak prema razvoju
kvalitetnih sistema..
Dino Dedi 39
Maturski rad Veb prezentacija programskog jezika C#
IV. Literatura
Internet :
http://www.scribd.com/doc/27049359/C-Programiranje-skripta
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 2.5.2012.
http://hr.wikipedia.org/wiki/C_Sharp 2.5.2012.
Dino Dedi 40