Delegati

Delegat je objekat koji sadrži referencu na metodu. Sličan je pointeru na funkciju u programskom jeziku C. Delegat specificira povratni tip i parametre koje svaki metod mora da obezbedi. U nastavku je prikazana deklaracija delegata. Ovakav delegat može da pokazuje na metode koje imaju ulazni parametar tip int i koje imaju povratnu vrednost tipa string.

public delegate string mojDelegat( int mojInt );


Primeri metoda

Ovde je definisana klasa koja ima dve metode koje imaju isti potpis kao i delegat. Odnosno metode imaju ulazni parametar tipa int i povratnu vrednost tipa string. Uočiti da je od definisanih metoda jedna statička a druga nije.

public class PrimerDelegataKlasa
{
     public string mojStringMetod ( int mojInt ) 
     {
          if ( mojInt > 0 )
          return( "pozitivan" );
          if ( mojInt < 0 )
          return( "negativan" );
          return ( "nula" );
     }
     // definisanje staticke metode
     public static string mojZnakMetod ( int mojInt ) 
     {
          if ( mojInt > 0 )
          return( "+" );
          if ( mojInt < 0 )
          return( "-" );
          return ( "" );
     }
}


Instanciranje delegata

Da bi se instancirao delegat tako da on pokazuje na metodu koja nije statička, najpre je potrebno kreirati objekat klase kojoj pripada nestatička metoda. Postupak instanciranja delegata:

PrimerDelegataKlasa mojObjekat = new PrimerDelegataKlasa();
mojDelegat mojDelegat1 = new mojDelegat( mojObjekat.mojStringMetod );

Sada  delegat mojDelegat1 pokazuje na nestatičku metodu mojStringMetod koja je definisana u predhodnom primeru. Prilikom instanciranja delegata tako da on pokazuje na statičku metodu nije neophodno instancirati klasu kojoj metoda pripada. Delegat mojDelegat2 pokazuje na statičku metodu mojZnakMetod:

mojDelegat mojDelegat2 = new mojDelegat(PrimerDelegataKlasa.mojZnakMetod );


Pozivanje metoda primenom delegata

Pošto delegat mojDelegat1 referencira metodu mojStringMetod, to je izraz mojDelegat1(5) ekvivalentan pozivu metode mojStringMetod(5). Analogno izraz mojDelegat2(5) je ekvivalentan pozivu metode mojZnakMetod(5).


Multicasting

Delegat može pozivati više od jedne metode. Ova osobina naziva se multicasting. U nastavku su definisana dva delegata a i b koji referenciraju statičke metode MetodaA i MetodaB respektivo. Izraz c = a + b označava da će delegat c pozivati i metodu MetodaA i metodu MetodaB.

MojDelagat a,b,c,d ;
a = new MojDelagat(MojaKlasa.MetodaA);
b = new MojDelegat(MojaKlasa.MetodaB);
c = a + b;


Events (događaji)

Windows i web bazirane aplikacije predstavljaju aplikacije vođene događajima. To znači da se kod izvršava kao odgovor na određene događaje. Ključna reč event omogućava da se specificira delegat koji će biti pozvan kada se desi određeni događaj, kao što je npr. klik na dugme. Metoda koja se izvršava kada se desi neki događaj naziva se event handler. Prikazana je deklaracija Click eventa za dugme i deklaracija EventHandler delegata.

public event EventHandler Click;

public delegate void EventHandler(Object sender, EventArgs e);


Klik na dugme

Kada se desi klik na dugme čija je instanca označena sa button1, event handler delegat poziva event handler button1_Click. U zavisnosti od koda definisanog u ovom event handleru izvršiće se određena akcija ko odgovor na klik korisnika na dugme.

this.button1.Click += new System.EventHandler(this.button1_Click);

Dodaj komentar Sviđa mi se - (3) Ne sviđa mi se - (0)    

  • Delegati i događaji 1
  • Delegati i događaji 2
  • Delegati i događaji 3