18
Delegati Bezbedan mehanizam za prosleđivanje parametara-referenci na metod –prosleđivanje pokazivača na metod i poziv metoda preko pokazivača ne bi bili bezbedni Koriste se primarno za obradu događaja i asinhrone povratne pozive (callback) Instance delegata sadrže reference na jedan ili više metoda –formira se lista poziva (invocation list) –metodi se stavljaju na listu poziva u konstruktoru delegata ili operatorima +,-,+=,-= –metodi sa liste pozivajuse preko delegata

Delegati

Embed Size (px)

DESCRIPTION

Sam programski jezik je uređen konačan skup znakova za formulisanje programa. Njegova definicija data u ISO standardu glasi: programski jezik je veštački jezik koji se koristi za predstavljanje programa. Sam program predstavlja sistem oznaka za opis algoritama i struktura podataka pomoću kojih ljudi komuniciraju sa računarom. Jednostavnije korišćenje mašinskog jezika dobija se uvođenjem simboličkih imena za naredbe i adreseme morijskih lokacija, a to omogućava asemblerski ili simbolički mašinski jezik. Asemblerski jezik je niskog nivoa, zbog toga što je korespodencija između asemblerskog i mašinskog jezika jedan prema jedan. Programer koristi naredbe računara na kome radi, pa stoga program nije prenosiv - ne može se izvršiti na drugom računaru bez reprogramiranja.

Citation preview

Page 1: Delegati

Delegati

Bezbedan mehanizam za prosleđivanje parametara-referenci na metod

–prosleđivanje pokazivača na metod i poziv metoda preko pokazivača ne bi bili bezbedni

Koriste se primarno za obradu događaja i asinhrone povratne pozive (callback)

Instance delegata sadrže reference na jedan ili više metoda

–formira se lista poziva (invocation list)

–metodi se stavljaju na listu poziva

u konstruktoru delegata ili

operatorima +,-,+=,-=

–metodi sa liste pozivajuse preko delegata

Page 2: Delegati

Deklaracija

Deklaracija:

[<atributi>][<modifikatori>]delegate<tip><identifikator>

(<parametri>);

Tip i parametri definišu povratni tip i potpis za metode sa liste poziva

Delegati se mogu deklarisati

– kao tip najvišeg nivoa ili

– kao ugnežđeni u klasu/strukturu

Page 3: Delegati

Primeri delegata

Primerci delegata se prave navođenjem imena metoda koji odgovara deklaraciji

– bilo koji statički ili metod instance koji odgovara deklaraciji može da se koristi

Dodela jednog delegata drugom kopira listu poziva iz izvorišnog u odredišni

Operatori + i += rezultuju u kombinovanim listama poziva

– reference na metode se ređaju redosledom dodavanja

– dodavanje jednog metoda na listu dva puta rezultuje u dupliranimreferencama na metod

Page 4: Delegati

Operatori – i -= rezultuju u uklanjanju referenci na metode sa liste poziva delegata

– u slučaju višestrukih referenci na metod – uklanja se poslednja referenca sa liste

– pokušaj uklanjanja reference na metod koji nije na listi ne izaziva grešku

Page 5: Delegati

Poziv delegata

Delegat se poziva po imenu sa parametrima

kao da je metod koji odgovara deklaraciji

– poziv izaziva izvršavanje svih metoda sa liste poziva redom, prosleđujući im parametre

– ako je parametar objekat ili ref parametar, promene iz jednog metoda vidi naredni metod

– povratna vrednost je ona koju vrati poslednji metod sa liste

Page 6: Delegati

Primer delegata

//neka su: int MetodX(int i, string s){} gde je X{1,2,3}//MetodX je statički ili metod objekta klasepublic delegate int MojDelegat(int i, string s);... Instance delegata sadrže reference na jedan ili više

metoda MojDelegat d1 = new MojDelegat(Metod1);MojDelegat d2 = new MojDelegat(Metod2);MojDelegat d3= d1+d2;//lista: Metod1, Metod2d3 += new MojDelegat(Metod3);//lista: Metod1, Metod2,

Metod3d3 -= d1;//lista: Metod2, Metod3d3 -= new MojDelegat(Metod3);//lista: Metod2int i = d3(5, "Proba");

Page 7: Delegati

Tip delegate

Tip delegate pravi neku vrstu objektne funkcije.

Tip delegate je slican deklaraciji funkcije, ali umesto toga on definise tip koji moze da pokazuje na jednu ili vise funkcija odredenog potpisa i povratnog tipa.

Page 8: Delegati

osnovne karakteristike:

1. Objekat tipa delegate moze umesto adresiranja jednog metoda u vremenu adresirati vise metoda. Kada pozovemo delegata koji adresira vise metoda, metodi se pozivaju u redosledu kako su dodeljeni objektu tipa delegate.

Page 9: Delegati

2. Metodi koje adresira delegat ne moraju biti clanovi iste klase. Svi metodi koje adresira delegat moraju deliti isti prototip i potpis. Ipak, ovi metodi mogu biti kombinacije i statickih i nestatickih metoda i mogu biti clanovi jedne ili vise razlicitih klasa

Page 10: Delegati

3. Deklaracija tipa delegate interno pravi novi podtip instance apstraktne klase Delegate ili MulticastDelegate. Ove klase su apstraktne bazne klase iz biblioteke .NET okruzenja i imaju kolekciju javnih metoda za upite nad objektom delegata i metodom(ima) na koje on pokazuje.

Page 11: Delegati

Deklaracija tipa delegate

(1) nivoa pristupa,

(2) kljucne red delegate,

(3) povratnog tipa i potpisa metoda koji tip delegate adresira i

(4) imena tipa delegata koje je smesteno izmedu po vratnog tipa i potpisa metoda.

Page 12: Delegati

public delegate void Action ();

Ovaj primer deklarise da Action bude delegat tipa public koji adresira metode bez parametara i sa povratnim tipom void:

Ako se tip delegate koristi za adresiranje samo jednog metoda u jednom trenutku, on moze adresirati funkciju clanicu bilo kog povratnog tipa i potpisa. Ipak, ako tip delegate istovremeno adresira dva ili vise metoda, povratni tip mora biti void.

Page 13: Delegati

U jeziku C# tip delegate je referentni tip. Zbog toga, njegova deklaracija - na primer,

Action theAction;

predstavlja rukovalac objektom delegata tipa Action delegate, ali ona sama nije objekat tipa delegate. Podrazumevana vrednost ovog rukovaoca je null. Ako pokusamo da ga upotrebimo pre nego sto mu dodelimo vrednost. generisace se greska za vreme kompajliranja

Page 14: Delegati

Da bi objekat theAction adresirao funkciju clanicu klase, prvo moramo pomocu izraza new napraviti tip Action delegate.

Za staticki metod argument konstruktora je ime klase kojoj metod pripada i ime samog metoda spojeni operatorom tacka (.):

theAction = new Action( Announce.announceDate );

Page 15: Delegati

Za nestaticki metod parametar konstruktora je objekat klase, pomocu kojeg zelimo da pozovemo metod, spojen sa imenom metoda - opet spojen pomocu operatora tacka.

Announce an = new Announce(); theAction = new Action( an.announceTime ); Statička funkcija članica announceDate () klase Announce

štampa trenutni datum na standardni izlaz u obliku long,Monday, February 26, 2001

Page 16: Delegati

Operator += i -=.

Da bismo delegatu dodelili adresu vise od jednog metoda, uglavnom koristimo operatore += i -=.

Na primer, zamislite da ste definisali klasu testHashtable. U njenom statičkom konstruktoru svaki dodeljeni test smo dodali objektu testHarness:

Page 17: Delegati

primer

public class testHashtable {public void test0(); public void test1(); static testHashtable() {testHarness.Tester += new testHarness.Action( test0 ); testHarness.Tester += new testHarness.Action( test1 );}//. . .}

Page 18: Delegati

Operator -=

Metod se može ukloniti pomoću operatora -=. Na primer, sledeci lokalni blok prvo postavlja, nakon toga izvršava i onda uklanja announceTime () iz objekta tipa delegate:{Announce an = new Announce();Action act = new testHarness.Action(an.announceTime );

testHarness.Tester += act; testHarness.run(); testHarness.Tester -= act;}