Suositeltava, 2024

Toimituksen Valinta

Ero edustajien ja tapahtumien välillä C #

molemmilla on tärkeä rooli tapahtumavetoisessa ohjelmassa. Edustajat voivat viitata menetelmään, ja se on melko samanlainen kuin C ++: n funktioosoitin. Tapahtumat ilmoittavat, että joitakin toimia on suoritettu. Keskeinen ero edustajien ja tapahtumien välillä on se, että edustajat pitävät viittausta menetelmistä ja tapahtuma tarjoaa mahdollisuuden käyttää tätä menetelmää edustajien avulla.

Vertailukaavio

Vertailun perusteetEdustajatTapahtumat
perustiedotEdustajalla on viittaus menetelmään.Tapahtuma on delegaattien ylimääräinen kerros.
Syntaksidelegoi Return_type-valtuutetun_nimi (parametri_luettelo);tapahtuman tapahtuma_delegate tapahtuman_nimi;
avainsanaValtuutettu ilmoitetaan käyttämällä avainsanaa "delegaatti".Tapahtuma julistetaan avainsanalla "tapahtuma".
ilmoitusEdustaja julistetaan minkä tahansa luokan ulkopuolelle.Tapahtuma ilmoitetaan luokan sisällä.
VedotaMenetelmän käyttämiseksi se on lähetettävä edustajalle.Käyttääksesi menetelmää, joka on määritettävä tapahtumalle.
Covariance ja ContravarianceNe tarjoavat joustavuutta edustajille.Ei tällaista käsitettä.
Tapahtuman käyttöliittymäEi tällaista käsitettä.Hallitsee tapahtumakäsittelijöiden luetteloa.
riippuvuusEdustajat ovat riippumattomia tapahtumista.Tapahtumaa ei voi luoda ilman edustajia.

Edustajien määritelmä

C #: ssä edustajia käytetään funktion osoittimena viittaamaan menetelmään. Se on nimenomaan objekti, joka viittaa siihen osoitettuun menetelmään. Sama valtuutettu voi käyttää eri menetelmiä, koska se kykenee pitämään viittauksen eri menetelmiin, mutta yksi kerrallaan. Mihin menetelmään valtuutettu käyttää, määritetään ajonaikaisesti. Edustajan julistamisen syntaksi on seuraava:

 delegoi Return_type-valtuutetun_nimi (parametri_luettelo); 

Tällöin Return_type ilmoittaa menetelmän palauttaman arvon tyypin, jota valtuutettu on kutsunut ja delegaatti_nimi on valtuutetun nimi. Parametriluettelo määrittelee luettelon parametreista, joita vaaditaan valtuutetun kutsumilla menetelmillä.

Joitakin tärkeitä asioita on muistettava edustajista. Se voi kutsua mitä tahansa menetelmää, joka vastaa sen allekirjoitusta ja palautustyyppiä. Edustaja voi kutsua sekä ilmentymismenetelmää että staattista menetelmää. Jos se kutsuu esimerkkimenetelmää, sen täytyy ottaa esineen avulla käyttöön menetelmä. Edustajat tukevat monilähetystä eli voit ketjuttaa menetelmät, joita kutsutaan automaattisesti, kun niihin viitataan. Sinun tarvitsee vain luoda valtuutettu objekti ja määrittää menetelmät toisilleen ketjun avulla käyttäen ”+ =” operaattoria. Voit myös poistaa menetelmän valitsemalla ”- =” operaattorin.

Ominaisuudet, jotka lisäävät delegaatin joustavuutta, ovat Covariance ja Contravariance. Covariance ja Contravariance sallivat tilan, jossa palautustyyppi ja edustajalle osoitetun menetelmän allekirjoitus poikkeavat edustajan tapauksesta.

  • Covariance -toiminnolla voit määrittää delegoijalle menetelmän, jossa menetelmän palautustyyppi on luokka, joka on johdettu luokasta, joka määrittelee valtuutetun palautustyypin.
  • Contravariance -toiminnolla voit määrittää delegoijalle menetelmän, jossa menetelmän parametrityyppi on luokan, joka on määritetty delegoidun parametriksi, perusluokka.

Tapahtumien määritelmä

Tapahtumat ovat toimintoja, jotka muuttavat kohteen tilaa. Tapahtumat julistetaan käyttäen edustajia ilman edustajien läsnäoloa, joita ei voi julistaa tapahtumista. Voit sanoa, että tapahtuma tarjoaa kapselointia edustajille. Tapahtumien ja tapahtumien käsittelijöiden käsittelyssä on kaksi tärkeää yhdistettä. Jos kohteet ovat kiinnostuneita tapahtumasta, se rekisteröi tapahtumakäsittelijän kyseiselle tapahtumalle. Ja aina kun tapahtumia laukaistaan, rekisteröityjä tapahtumakäsittelijöitä kutsutaan. Tapahtuman ilmoitus on seuraava:

 tapahtuman tapahtuma_delegate tapahtuman_nimi; 

Tässä tapahtuma on avainsana, joka näyttää tapahtuman ilmoituksen. Seuraavaksi event_delegate näyttää tapahtuman tukevan valtuutetun nimen. Tapahtuman_nimi on sitten tapahtuman nimi

Tapahtumien käsittelyssä on muistettava joitakin tärkeitä kohtia. Kuten valtuutetut, tapahtumiin voi myös liittyä monilähetyksiä eli useita kohteita, jotka on ketjutettu (rekisteröity) tapahtumakäsittelijään, vastaavat, kun tapahtuma nostetaan. Tapahtumakäsittelijät voidaan lisätä ketjuun operaattorin ”+ =” avulla ja ne voidaan poistaa käytöstä operaattorin ”- =” avulla. Sekä staattista että esimerkkimenetelmää voidaan käyttää tapahtumakäsittelijänä. Tapahtumien kuljettaja voi ohjata tapahtumien käsittelijöiden luettelon toteutusta.

Käyttöliittymä voi sisältää tapahtumia. Tapahtumat voivat olla myös abstrakteja, kun taas accessor-tapahtuma ei voi olla abstrakti. Tapahtuma voi olla virtuaalinen ja johdettu luokka voi ohittaa.

Edustajien ja tapahtumien tärkeimmät erot C #: ssä

  1. Valtuutettu on objekti, jota käytetään funktion osoittimena menetelmän viitteen pitämiseksi. Toisaalta tapahtumilla annetaan abstraktiota edustajille.
  2. Avainsana, jota tarvitaan valtuutetun julistamiseksi, on valtuutettu, kun taas avainsana, joka vaaditaan tapahtuman julistamiseksi, on tapahtuma .
  3. Edustaja julistetaan luokan ulkopuolelle, kun taas tapahtuma ilmoitetaan luokan sisällä.
  4. Jos haluat käyttää menetelmää valtuutetun objektin avulla, menetelmä on lähetettävä valtuutetun objektin kohdalle. Toisaalta menetelmän kutsuminen tapahtumakohdeobjektin avulla on lähetettävä tapaustapahtumaan.
  5. Covariance ja Contravariance tarjoavat ylimääräistä joustavuutta valtuutetuille kohteille. Toisaalta tapahtumalla ei ole tällaisia ​​käsitteitä.
  6. Event Accessor käsittelee tapahtumakäsittelijöiden luetteloa, kun taas delegaatilla ei ole tällaista käsitettä.
  7. Edustajat ovat riippumattomia tapahtumista, mutta tapahtumia ei voi luoda ilman valtuutettua.

johtopäätös:

Edustajat ovat hyödyllisiä, kun ne tukevat tapahtumia, ja ne tarjoavat mahdollisuuden toteuttaa menetelmä runtime-aikana. Tapahtumien kuljettaja sallii synkronoida tapahtumakäsittelijät monisäikeisissä sovelluksissa.

Top