Delegaatit ja tapahtumat
- Luento Youtubessa
- tjlahton2012-02-07_1516.mp4 35.5 Mt
- tjlahton2012-02-07_1516.wmv 57.4 Mt
- tjlahton2012-02-07_1516.mp3 18.8 Mt
Tutustutaan hieman paremmin tapahtumankäsittelyyn (events) ja delegaatteihin. Opitaan määrittelemään omia delegaatteja ja tapahtumia omissa luokissa.
Luentoesimerkki (Esimerkki zip-paketissa)
Delegaatit- ja tapahtumat esimerkki (Esimerkki zip-paketissa)
Tapahtumat
- Joku aiheuttaa tapahtuman: kiinnostuneet reagoivat siihen
- Tapahtumalla voi olla useita "kuulijoita". Sama kuulija voi seurata useita tapahtumia kerralla
- Tapahtuma jolla ei ole seuraajia ei myöskään koskaan tapahdu
- Tapahtumilla viestitään usein käyttäjän tekemisistä esim. painikkeiden painalluksista, menuvalinnoista jne.
- .NET-ympäristössä tapahtumat perustuvat EventHandler-delegaattiin ja EventArgs-luokkaan
delegate void EventHandler(object sender, EventArgs e);
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.
- 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!
- Delegaattimäärittelyn palautustyyppi ja parametrit määräävät millaista funktiota voidaan käyttää
Lisätietoa:
- Introduction to Delegates and Events
- Delegaatit ja tapahtumankäsittelijät
- Delegates and Events in C#
- Delegates (C# Programming Guide)
- When to Use Delegates Instead of Interfaces
- Events
- anchor koon muuttuminen lomakkeen mukana
- combobox
- radiobutton
- flowlayoutpanel
- disabloitu kontrolli
- kontekstimenu

Käyttäjien kommentit