Professional Documents
Culture Documents
Zagreb, 2009
ISBN 978-953-7390-53-2
autor:
Zagreb, 2009
ISBN 978-953-7390-53-2
Sadraj:
1. Poglavlje: .......... Uvod ...................................................................................................................................................................... 5
1.1. Uvod 6
1.2. Osnovni principi ........................................................................................................................................................................... 7
1.3. Objektno orijentirano programiranje i programski jezik C# ........................................................................................................... 8
1.4. "Hello World!" ............................................................................................................................................................................ 10
1.4.1. Primjer program "Hello World" u programskom jeziku C# .............................................................................................. 10
1.4.2. Razlikovanje velikih i malih slova...................................................................................................................................... 10
1.4.3. Prazan prostor ................................................................................................................................................................. 10
1.4.4. Tipovi, klase ..................................................................................................................................................................... 10
1.4.5. Metode ............................................................................................................................................................................. 11
1.4.6. Kljuna rije static ......................................................................................................................................................... 11
1.4.7. Komentari......................................................................................................................................................................... 11
1.4.8. Konzolni programi ............................................................................................................................................................ 11
1.4.9. Operator toka (.) ............................................................................................................................................................. 12
1.4.10. Imenski prostori .............................................................................................................................................................. 12
1.4.11. Pokretanje programa ...................................................................................................................................................... 12
1.4.12. Kljuna rije using ......................................................................................................................................................... 14
1.4.13. Kljuna rije namespace ................................................................................................................................................. 15
1.4.14. Parametri metode Main (string[] args) ............................................................................................................................ 15
2. Poglavlje: .......... Osnove programskog jezika C#......................................................................................................................... 17
2.1. Tipovi 18
2.1.1
Ugraeni tipovi .......................................................................................................................................................... 18
2.2. Varijable i konstante .................................................................................................................................................................. 21
2.2.1. Varijable ........................................................................................................................................................................... 21
2.2.2.Obavezna deklaracija i inicijalizacija .................................................................................................................................. 22
2.2.3. Konstante ......................................................................................................................................................................... 23
2.2.4. Enumeracije ..................................................................................................................................................................... 24
2.2.5. Nizovi znakova tip podataka string ............................................................................................................................. 26
2.3. Iskazi 27
2.3.1. Blokovi iskaza .................................................................................................................................................................. 27
2.3.2. Izrazi ................................................................................................................................................................................ 27
2.3.3. Iskazi bezuvjetnog grananja ............................................................................................................................................. 28
2.3.4. Iskazi uvjetnog grananja ................................................................................................................................................... 30
2.3.5. Iskazi switch: alternativa ugnijeenim iskazima if .......................................................................................................... 33
2.3.6. Iteracijski iskazi ................................................................................................................................................................ 35
2.4. Operatori ................................................................................................................................................................................... 40
2.4.1. Operator pridruivanja ...................................................................................................................................................... 40
2.4.2. Matematiki operatori ....................................................................................................................................................... 40
2.4.3. Operatori za uveavanje i umanjivanje ............................................................................................................................. 42
2.4.4. Relacijski operatori ........................................................................................................................................................... 45
2.4.5. Logiki operatori ............................................................................................................................................................... 46
2.4.6. Prednost operatora .......................................................................................................................................................... 46
2.4.7. Ternarni operator ............................................................................................................................................................. 47
3. Poglavlje: .......... Klase i objekti ..................................................................................................................................................... 49
3.1. Klase i objekti ............................................................................................................................................................................ 50
3.1.1. Deklariranje i definiranje klase .......................................................................................................................................... 50
3.1.2. Modifikatori pristupa ......................................................................................................................................................... 51
3.1.3. Instanciranje (stvaranje) objekata ..................................................................................................................................... 52
3.1.4. Primjer deklaracije, definicije i instanciranja novog objekta klase ...................................................................................... 53
3.1.5. Konstruktori ...................................................................................................................................................................... 55
3.1.6. Inicijalizatori ..................................................................................................................................................................... 58
3.1.1
Kljuna rije this ...................................................................................................................................................... 58
3.1.8. Unitavanje objekata ........................................................................................................................................................ 59
3.2. Statiki lanovi i lanovi instance ............................................................................................................................................... 59
3.2.1. Pozivanje statikih lanova............................................................................................................................................... 60
3.2.2. Statike metode za pristup statikim poljima .................................................................................................................... 62
3.2.3. Koritenje statikog konstruktora ...................................................................................................................................... 62
3.2.4. Statike klase ................................................................................................................................................................... 62
3.3. Metode ...................................................................................................................................................................................... 63
3.3.1. Prosljeivanje parametara ................................................................................................................................................ 64
3.3.2. Preoptereivanje metoda i konstruktora ........................................................................................................................... 66
3.4. Svojstva .................................................................................................................................................................................... 69
3.4.1. Koritenje svojstava ......................................................................................................................................................... 69
3.4.2. Pristupnik get ................................................................................................................................................................... 70
3.4.3. Pristupnik set ................................................................................................................................................................... 71
3.4.4. Readonly i writeonly svojstva ........................................................................................................................................... 72
3.4.5. Polja readonly .................................................................................................................................................................. 73
4. Poglavlje: .......... Nasljeivanje i polimorfizam .............................................................................................................................. 75
4.1. Nasljeivanje i polimorfizam ...................................................................................................................................................... 76
4.1.1. Specijalizacija i generalizacija .......................................................................................................................................... 76
4.1.2. Nasljeivanje .................................................................................................................................................................... 77
Str.50
Uoavamo da se klasa deklarira pomou kljune rijei class koju slijedi proizvoljan naziv klase
(identifikator) i zatim, unutar bloka vitiastih zagrada ({}), slijede definicije lanova od kojih se
sastoji tijelo klase.
Modifikator pristupa je neobavezni dio definicije. Obino se koristi public.
Dio deklaracije iza naziva (identifikatora): osnovna klasa i suelje(a) odnosi se na
nasljeivanje. Klasa u C#-u moe naslijediti lanove jedne klase i lanove proizvoljnog broja
suelja. Nasljeivanje je isto neobavezan dio deklaracije, a o njemu e vie govora biti u nastavku.
Uzmimo za primjer nau klasu Osoba i pokuajmo analizirati njezinu deklaraciju i definiciju:
www.racunarstvo.hr
Str.51
Dakle, naa klasa deklarirana je pomou modifikatora pristupa public i zove se Osoba. Unutar nje
definirano je pet public polja (Ime, Prezime, Starost, Spol, Zanimanje), jedno private polje
(VrijemeInstanciranja) i jedna public void metoda IspisiDetalje().
Napomena: Za definiranje privatnog polja VrijemeInstanciranja koristili smo sistemsku
strukturu DateTime koja u .NET platformi opisuje podatak za datum i vrijeme.
DateTime.Now daje trenutni datum i vrijeme sistemskog sata raunala na kojem se
program izvrava. Dakle, u trenutku instanciranja novog objekta, vrijednost ovog
privatnog polja bit e postavljena na trenutani datum i vrijeme.
Visoka
Str.52
Isto tako, pet public polja unutar klase Osoba bit e javno dostupno i izvan same klase, tj. vidljivo
svim korisnicima objekta instanciranog iz te klase.
Meutim, suprotno tomu, private polje VrijemeInstanciranja nee biti javno dostupno, nego je
ono privatno polje koje se moe koristiti jedino unutar klase Osoba.
Public (javna) metoda IspisiDetalje() objektima instanciranim iz klase Osoba dostupna je
samo za pozivanje, tj. objekt moe dohvatiti samo njezino ime. Korisnik objekta moe ju pozvati, ali
ne moe vidjeti njezino tijelo. Ovaj princip omoguuje programerima da po elji detaljno oblikuju
suelje svojim objektima (uoimo u primjeru da e se u ispisu detalja o objektu nalaziti informacija
o vremenu instanciranja, ali nitko izvana nee vidjeti da je to omoguilo private polje
VrijemeInstanciranja definirano unutar klase Osoba).
U sljedeoj tablici pogledajmo saetak modifikatora pristupa u programskom jeziku C#.
Modifikator pristupa
Ogranienja
public
private
protected
internal
protected internal
Napomena: Iako se moemo osloniti na injenicu da se sve klase i svi lanovi klase prema
podrazumijevanim postavkama deklariraju kao private, dobro je prakticirati i
eksplicitno pisanje private modifikatora pristupa. Izriito zadavanje pristupa
oznaava svjesnu odluku i olakava pregled kda.
www.racunarstvo.hr
Str.53
Drugim rijeima, kao to nije mogue dodijeliti vrijednost ugraenom tipu, tako ni sintaksa
programskog jezika C# ne dozvoljava dodjeljivanje vrijednosti samoj klasi kao novom definiranom
tipu.
Umjesto toga, kod primitivnih tipova uvijek smo deklarirali varijablu odreenog tipa, a zatim se toj
varijabli mogla dodijeliti vrijednost.
int x = 5;
Isto je potrebno napraviti i s klasom instancirati (stvoriti) novi objekt te klase, a zatim dodijeliti
vrijednosti njegovim poljima.
Ipak, sintaksa za stvaranje novih objekata nije u potpunosti ista kao za stvaranje novih varijabli.
Razlika postoji jer su primitivni tipovi varijabli (int, char...) vrijednosni tipovi i stvaraju se na
stogu, dok su objekti referentni tipovi podataka i stvaraju se na hrpi.
Stoga za instanciranje objekata koristimo kljunu rije new, kao na primjer:
Osoba o1 = new Osoba();
Varijabla objekta o1 zapravo ne sadri vrijednost za instancirani objekt klase Osoba, ve samo
adresu tog (neimenovanog) objekta koji je stvoren na hrpi. o1 je samo referenca tog objekta.
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace DeklaracijaKlase
{
public class Osoba
{
// javno dostupna polja
public string Ime;
public string Prezime;
public int Starost;
public string Spol;
public string Zanimanje;
// privatno polje
private DateTime VrijemeInstanciranja = DateTime.Now;
// inicijalizator
// javna metoda
public void IspisiDetalje()
{
Console.WriteLine("Objekt klase Osoba - detalji:");
Console.WriteLine(
"Ime: " + Ime + "\n" +
"Prezime: " + Prezime + "\n" +
"Starost: " + Starost + "\n" +
"Spol: " + Spol + "\n" +
"Zanimanje: " + Zanimanje + "\n" +
"Vrijeme instanciranja: " + VrijemeInstanciranja.ToLongTimeString()
);
}
}
class Program
Visoka
Str.54
{
static void Main(string[] args)
{
Osoba o1 = new Osoba(); // instanciranje novog objekta klase Osoba
// dodjeljivanje vrijednosti javnim poljima objekta
o1.Ime = "Ivan";
o1.Prezime = "Ivankovi";
o1.Starost = 25;
o1.Spol = "Muki";
o1.Zanimanje = "Tajni agent";
// poziv public metode objekta
o1.IspisiDetalje();
}
}
}
www.racunarstvo.hr
Str.55
3.1.5. Konstruktori
Iz sintakse koja se koristi za instanciranje novog objekta:
Osoba o1 = new Osoba();
vidimo da taj iskaz izgleda kao da poziva metodu, i to zajedno sa zagradama (()). Zapravo,
metoda se i poziva svaki put kad instanciramo novi objekt. Ta metoda naziva se konstruktor.
Zadatak konstruktora je stvaranje objekta koji je definiran klasom i njegovo postavljanje u ispravno
stanje.
Klasa Osoba iz naeg primjera ne definira konstruktor eksplicitno pa ga u tom sluaju CLR i
prevoditelj sami pruaju. Taj podrazumijevani (defaultni) konstruktor stvara u memoriji objekt
klase Osoba, ali ne izvodi nikakvu drugu akciju.
Varijable, koje su lanice klase (polja), inicijaliziraju se u bezazlene vrijednosti (cjelobrojne
vrijednosti se inicijaliziraju s nulom, nizovi znakova s praznim nizom).
U sljedeoj tablici nalazi se popis vrijednosti koje se podrazumijevano dodjeljuju primitivnim
tipovima.
Tip
Podrazumijevana vrijednost
char
'\0' (null)
enum
logiki
false
reference
null
Visoka
Str.56
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace Konstruktori
{
public class Osoba
{
// Eksplicitno navedeni konstruktor
public Osoba(string ime, string prezime, int starost,
string spol, string zanimanje)
{
this.Ime = ime;
this.Prezime = prezime;
this.Starost = starost;
this.Spol = spol;
this.Zanimanje = zanimanje;
}
// javno dostupna polja
public string Ime;
public string Prezime;
public int Starost;
public string Spol;
public string Zanimanje;
// privatno polje
private DateTime VrijemeInstanciranja = DateTime.Now;
// inicijalizator
// javna metoda
public void IspisiDetalje()
{
Console.WriteLine("Objekt klase Osoba - detalji:");
Console.WriteLine(
"Ime: " + Ime + "\n" +
www.racunarstvo.hr
Str.57
}
class Program
{
static void Main(string[] args)
{
// instanciranje novog objekta pomou eksplicitno definiranog konstruktora
Osoba o1 = new Osoba("Ivan", "Ivankovi", 25, "Muki", "Tajni agent");
o1.IspisiDetalje();
}
}
}
Deklaracija konstruktora poinje kljunom rijei public koja osigurava mogunost poziva ove
metode vanjskim objektima. Zatim se navodi ime metode (konstruktora) koje je zapravo ime same
klase (Osoba) te unutar zagrada (()) slijedi deklaracija parametara. Za svaki parametar navodi se
njegov povratni tip i ime. Parametri se odvajaju zarezima (,).
Napomena: Primijetimo da je konstruktor metoda koja nema povratni tip. Tip kojeg ova metoda
vraa je zapravo sama klasa u kojoj ju definiramo (Osoba). Drugim rijeima, poziv
konstruktora vratit e instancirani objekt te klase (objekt klase Osoba).
Unutar tijela konstruktora definirano je da se svakom public polju klase vrijednost inicijalizira na
vrijednost odgovarajueg parametra.
Definiranje konstruktora na ovakav nain omoguuje stvaranje novog objekta klase Osoba pomou
samo jedne linije kda, kao to moemo vidjeti u metodi Main():
Osoba o1 = new Osoba("Ivan", "Ivankovi", 25, "Muki", "Tajni agent");
Visoka
Str.58
3.1.6. Inicijalizatori
Umjesto u konstruktoru, vrijednosti polja (varijabli lanica) mogu se inicijalizirati u inicijalizatorima
(engl. initializer). Inicijalizator moemo stvoriti pridruivanjem poetne vrijednosti lanu klase. U
naem primjeru pomou inicijalizatora smo dodijelili poetnu vrijednost privatnom polju
VrijemeInstanciranja na vrijednost trenutnog datuma i vremena sistemskog sata:
private DateTime VrijemeInstanciranja = DateTime.Now;
// inicijalizator
3.1.1
Kljuna rije this upuuje na trenutnu instancu objekta. Moemo rei i ovako: kad se instancira
objekt iz klase, this predstavlja taj objekt.
Referenca this je skrivena referenca dostupna svim nestatikim metoda klase (metodama koje
nemaju kljunu rije static u svojoj deklaraciji). Preko reference this svaka nestatika metoda
moe pozivati sve druge nestatike lanove (metode i varijable) objekta.
this se moe koristiti na razne naine.
3.1.7.1. Kvalifikacija lanova instance skrivenih parametrima pomou this
U prethodnom primjeru imamo definiran konstruktor koji dodjeljuje lanovima klase (poljima)
vrijednosti proslijeene parametrima. Primijetimo da se i lanovi klase, i parametri jednako nazivaju
(Ime ime, Prezime prezime...). Kod ovakvog stila imenovanja dobro je to to je iz naziva
jasno koji parametar inicijalizira koje polje. Loa je strana to isti nazivi mogu zbuniti.
Referenca this stoga se ovdje koristi za rjeavanje vieznanosti naziva. Kad napiemo
this.Ime, jasno je da se radi o lanu klase, a ne o parametru. Stoga je za pozivanje lana klase
preporuljivo uvijek navoditi this.
Metoda IspisiDetalje() tada bi izgledala ovako:
public void IspisiDetalje()
{
Console.WriteLine("Objekt klase Osoba - detalji:");
Console.WriteLine(
"Ime: " + this.Ime + "\n" +
"Prezime: " + this.Prezime + "\n" +
"Starost: " + this.Starost + "\n" +
"Spol: " + this.Spol + "\n" +
"Zanimanje: " + this.Zanimanje + "\n" +
"Vrijeme instanciranja: " + this. VrijemeInstanciranja.ToLongTimeString()
);
}
Napomena: Referenca this koristi se jo i kod prosljeivanja cijelog objekta kao parametra u
drugu metodu, prilikom rada s indekserima i kod koritenja preoptereenih
konstruktora. Detalje o tim primjenama vidjet emo u narednim poglavljima.
www.racunarstvo.hr