Professional Documents
Culture Documents
C# Tipovi Klasa I
C# Tipovi Klasa I
http://alzan.info/skola-c-tipovi-klasa-1/
ASCBLOG
Search Website
RECENT POSTS
Linux svakodnevnica 04/11: to smo pronali u oujku 2011. (0) Ispriajte priu o sebi Foto-prie su jo prole godine postale hit u svijetu. Naime, radi se o tome da []
7 MONTHS AGO
kola Silverlighta: Koraci u kreiranju out-of-browser aplikacije (0) Jedna od najuzbudljivijih mogunosti je predstavljena u Silverlight 3 verziji, a poboljana je u Silverlight 4. Naravno, radi se o []
7 MONTHS AGO
kola C#: Tipovi klasa (2) (0) Razlomi se u fajlove Oblast o klasama emo zavriti objanjavajui indeksere, parcijalne klase i metode, statike klase, a spomenut []
7 MONTHS AGO
Linux svakodnevnica 03/11 (0) KDE 4.6, novi light browser, fenomenalna P2P aplikacija, Dokirajte docky Za one koji ne znaju, Docky je napredni []
7 MONTHS AGO
kola Silverlighta: Mrena komunikacija (4) (0) Pravimo chat aplikaciju Iako veina aplikacija koristi proxy servis ili jednu od klasa za skidanje podataka putem HTTP(S) protokola, []
7 MONTHS AGO SHOW MORE
Klasa koje su po svojoj logici potpuno suprotne sealed klasama su apstraktne klase (eng. abstract class). One su od samog poetka dizajnirane da budu samo bazne klase i oznaavamo ih kljunom rijei abstract. Kada kompajler naie na ovu rije, on zna da je ta klasa dizajnirana da bude bazna i zbog toga nee dozvoliti da se u njoj kreira niti jedna linija koda. Pogledajmo primjer.
LOG IN
Hello Guest. Login below if you have an account User Password Remember me Lost your password?
1 od 4
2.12.2011. 23:38
http://alzan.info/skola-c-tipovi-klasa-1/
namespace Skola_C_Sharp_Mar11 { public abstract class GeometrijskiOblik { public abstract void Crtaj(); } public class Krug : GeometrijskiOblik { public override void Crtaj() { // Nesto se crta } } public class Klasa { static void Main() { Krug krug = new Krug(); krug.Crtaj(); //Ovo nece raditi!! //Error: Cannot create an instance of the abstract class or interface GeometrijskiOblik oblik = new GeometrijskiOblik();
Mon
Tue
Wed
Thu
Fri
Sat
Sun
5 12 19 26
6 13 20 27
7 14 21 28
8 15 22 29
9 16 23 30
10 17 24 31
11 18 25
RECENT COMMENTS
ben 10 igre Hvala! Moja klikna oboava ove igre.
8 MONTHS AGO
Alan Must have: - Odlina ekstenzija za Nautilus (4) - Ekstenzija za rad sa slikama (5+)
8 MONTHS AGO
Gledajui logiki, nema smisla kreirati objekt GeometrijskiOblik jer u prirodi on nije nita. Smisao tek dobiva kada kreiramo konkretan geometrijski oblik, kao na primjer krug. Zbog toga je klasa GeometrijskiOblik apstraktna, odnosno ne dozvoljava instanciranje. U klasi Krug ste mogli primijetiti da smo iskoristili metodu Crtaj(), ali da ispred nje stoji kljuna rije override. Ona govori da je u klasi Krug napisana implementacija te metode. tovie, mi smo je morali implementirati jer smo naslijedili apstraktnu klasu. Zakljuak je da kada elimo natjerati klijenta da implementira sve metode neke klase, takvu klasu emo uiniti apstraktnom. Jo jedna prednost apstraktne klase je da njene metode ne moraju imati implementaciju, nego je dovoljna definicija metode.
public abstract void Crtaj();
Wannabe Ovaj blog stvarno puno vrijedi. Samo nastavite s dobrim poslom. Svaka ast!
9 MONTHS AGO
Oni koji dolaze iz svijeta programskog jezika C++ su navikli da im taj jezik dozvoljava implementiranje apstraktnih metoda. Takvi trebaju znati da su dizajneri jezika C# odluili izbaciti tu mogunost jer se apstraktna implementacija ionako veoma rijetko koristila u originalnom obliku. Trei tipovi klasa su ugnijeene klase (eng. nested class). To su one klase koje su definirane unutar granica druge klase (otuda im i ime). Ovdje emo samo spomenuti da se po definicije klase koje definiramo na normalan nain nazivaju neugnijeene klase (eng. non-nested class). Ugnijeene klase imaju neke posebne mogunosti i najee ih koristimo u situacijama kada trebamo pomone klase (tzv. helper klase) koje e obaviti neki posao u ime klase u kojoj se nalaze. Na primjer, imamo li klasu koja uva kolekciju objekata i nama je potrebno iterirati kroz te objekte i vanjskim korisnicima dozvoliti kreiranje markera ili kursora koji e im biljeiti dokle su doli u iteraciji. Koritenjem ugnijeenih klasa mi emo sprijeiti korisnike da imaju direktnu referencu na objekte iz kolekcije, a omoguit emo veu fleksibilnost u promjeni unutarnjeg stanja klase bez razbijanja koda kojeg koristi matina klasa. Ugnijeene klase imaju pristup svim vidljivim lanovima matine klase, ak i privatnim lanovima. Pogledajmo malo opirniji primjer.
public abstract class GeometrijskiOblik { public abstract void Crtaj(); } public class Kvadrat : GeometrijskiOblik { public override void Crtaj() { Console.WriteLine("Kvadrat.Crtaj()"); } } public class Krug : GeometrijskiOblik { public override void Crtaj() { Console.WriteLine("Krug.Crtaj()"); } } public class Crtanje : IEnumerable
2 od 4
2.12.2011. 23:38
http://alzan.info/skola-c-tipovi-klasa-1/
} public class Klasa { static void Main() { Kvadrat kvadrat = new Kvadrat(); Krug krug = new Krug(); Crtanje crtanje = new Crtanje(); crtanje.Dodaj(kvadrat); crtanje.Dodaj(krug); foreach (GeometrijskiOblik go in crtanje) { go.Crtaj(); } } }
private ArrayList oblici; private class Iterator : IEnumerator { public Iterator(Crtanje crtanje) //nadklasa kao parametar { this.crtanje = crtanje; _trenutni = -1; } public void Reset() { _trenutni = -1; } public bool MoveNext() { ++_trenutni; if (_trenutni < crtanje.oblici.Count) return true; return false; } public object Current { get { return crtanje.oblici[_trenutni]; } } private Crtanje crtanje; //referenca na objekt nadklase private int _trenutni; } public Crtanje() { oblici = new ArrayList(); } public IEnumerator GetEnumerator() { return new Iterator(this); } public void Dodaj(GeometrijskiOblik gOblik) { oblici.Add(gOblik); }
Radi ovoga primjera morali smo iskoristiti interfejse IEnumerable i IEnumerator koje ovdje nemamo prostora detaljno opisivati, ali emo zato interfejsima posvetiti seriju detaljnih lanaka u jednoj od narednih dijelova ove kole. Nas ovdje najvie zanima ugnijeena klasa Iterator. Ona je oznaena kao private, a to mogu samo ugnijeene klase, jer sve neugnijeene klase mogu biti samo public ili internal. Kao to vidimo, ugnijeena klasa kreira referencu na objekt svoje matine klase (nadklase) Crtanje. U njega zatim sprema objekt svoje nadklase koji joj je proslijeen kao parametar vlastitog konstruktora. Takoer je vano primijetiti da ugnijeena klasa bez ikakvih problema pristupa privatnom elementu oblici kao i njegova vlastita klasa. Kako je ugnijeena klasa privatna, kako emo onda kreirati njenu instancu? Pa, i neemo, nego je to doputeno uraditi samo njenoj nadklasi, klasi Crtanje, koja to ini preko metode GetEnumerator(). U sluajevima kada su ugnijeene klase oznaene kao public, instanciraju se preko svoje nadklase, kao da se nalaze unutar nekog namespacea. Na primjer,
public class Nadklasa { public class NestedKlasa { } } public class NasaKlasa { static void Main() { Nadklasa.NestedKlasa nestedKlasa = new Nadklasa.NestedKlasa(); } }
Postoje veoma rijetke situacije kada nasljeujemo klasu koja ima ugnijeenu klasu, te u novoj klasi moramo kreirati ugnijeenu klasu istog imena kao u baznoj klasi. I ovdje moemo koristiti kljunu rije new.
public class Nadklasa { public class NestedKlasa{ } public class Izvedena : Nadklasa { private new class NestedKlasa { }
Moramo napomenuti da su ovo samo teoretske situacije i da one mogu izbjei u 99% sluajeva, a da ne
3 od 4
2.12.2011. 23:38
http://alzan.info/skola-c-tipovi-klasa-1/
govorimo da u 99% ovakvih sluajeva ovakva situacija mirie na lo dizajn. Jo jednom napominjemo zlatno pravilo programiranja: Ako ti programski jezik neto dozvoljava, to nikako ne znai da to treba i uraditi. Iduu put emo nastaviti upoznavati se s tipovima klasa u programskom jeziku C# te emo vidjeti to su indekseri, parcijalne klase, parcijalne metode, statike klase i singleton pattern. Share on Facebook
.NET 2011 C#
This entry was posted by Alan on May 2, 2011 at 18:15, and is filed under kola C#. Follow any responses to this post through RSS 2.0.You can leave a response or trackback from your own site.
Related Posts
Comments (0)
4 od 4
2.12.2011. 23:38