Delegaatit ja tapahtumat

Tutustutaan hieman paremmin tapahtumankäsittelyyn (events) ja delegaatteihin. Opitaan määrittelemään omia delegaatteja ja tapahtumia omissa luokissa.

Luentoesimerkki (Esimerkki zip-paketissa)

Tapahtumat

Delegaatit

Delegaatti on sama asia kuin funktio-osoitin. Delegaattien avulla voidaan vasta ohjelman suoritusaikana päättää mitä funktiota kutsutaan.

Delegaatteja käytetään erityisesti tapahtumapohjaisessa ohjelmoinnissa eli esim. windows-ohjelmoinnissa.

  1. Määritellään delegaatti
    • Delegaattimäärittelyn palautustyyppi ja parametrit määräävät millaista funktiota voidaan käyttää
      public delegate int Esimerkki();
      public delegate void Esimerkki2(object sender, EventArgs e); // windows forms -tapahtumat
      
    • Tapahtuman aiheuttavassa luokassa luodaan delegaattityyppinen tai event delegaatti -tyypinen muuttuja:
      public Esimerkki tapahtuma;
      public event Esimerkki2 tapahtuma2;
      

      event-sana aiheuttaa tiettyjä rajoituksia: tapahtumaa voidaan kutsua vain luokan sisältä, event voidaan asettaa ja poistaa +=- ja -=-operaattoreilla ja tapahtuma pitää aina olla muotoa tapahtuma(object source, EventArgs e)

    • Jossain vaiheessa olion elämää se kutsuu delegaattiaan eli aiheuttaa tapahtuman:
      tapahtuma();
      tapahtuma2(this, e);
      
    • Tapahtumalla pitää kuitenkin olla myös seuraaja eli joku, joka on luonut edellämainittua luokkaa olevan olion ja määritellyt seuraajan tapahtumalle:
                  Foo joku = new Foo;
                  joku.tapahtuma = new Esimerkki(funktio); // jos delegaatti palauttaa jotain niin vain yksi mahdollinen seuraaja
                  joku.tapahtuma2 += new Esimerkki2(funktio2); // jos delegaatti ei palauta mitään ja mahdollista olla useampi seuraaja
      	public int funktio() {
      
      	}
      	public void funktio2(object sender, EventArgs e) {
      
      	}
      
    • funktiota kutsutaan aina kun tapahtuu!

Lisätietoa:

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/gko/luennot/luento4/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
2012-03-22 14:06:19
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta