Primerjalna tabela
Podlaga za primerjavo | Delegati | Dogodki |
---|---|---|
Osnovno | Delegat ima referenco metode. | Dogodek je presežna abstrakcija, zagotovljena delegatom. |
Sintaksa | delegat return_type ime_deljenika (seznam parametrov); | dogodek event_delegate event_name; |
Ključna beseda | Delegat je razglašen s ključno besedo "pooblaščenec". | Dogodek je deklariran s ključno besedo "dogodek". |
Deklaracija | Delegat je razglašen izven katerega koli razreda. | Dogodek je deklariran znotraj razreda. |
Povabi | Če želite poklicati metodo, jo je treba posredovati pooblaščencu. | Za priklic metode ga je treba dodeliti dogodku. |
Kovarianca in kontraviancija | Delegatom zagotavljajo fleksibilnost. | Takšnega koncepta ni. |
Accessor za dogodek | Takšnega koncepta ni. | Upravlja seznam upravljavcev dogodkov. |
Odvisnost | Delegati so neodvisni od dogodkov. | Dogodka ni mogoče ustvariti brez delegatov. |
Opredelitev delegatov
V C # delegati se uporabljajo kot kazalec funkcij za sklicevanje na metodo. Posebej je predmet, ki se nanaša na metodo, ki ji je dodeljena. Isti pooblaščenec se lahko uporablja za navajanje različnih metod, saj je zmožen držati referenco različnih metod, vendar eno za drugo. Katera metoda bo izvedena s strani pooblaščenca, se določi v času izvajanja. Sintaksa razglasitve delegata je naslednja:
delegat return_type ime_deljenika (seznam parametrov);
Pri tem tip vrnejo vrsto vrednosti, ki jo vrne metoda, ki jo kliče delegat, ime delegata pa ime delegata. Seznam parametrov definira seznam parametrov, ki jih zahtevajo metode, ki jih bo zahteval pooblaščenec.
Obstaja nekaj pomembnih točk, ki jih je treba spomniti na delegate. Lahko pokliče katerokoli metodo, ki se ujema s svojim podpisom in vrsto vrnitve. Delegat lahko kliče tako metodo primerka bodisi statično metodo. Če pokliče metodo primerka, mora uporabiti objekt, da pokliče metodo. Delegati podpirajo multicasting, kar pomeni, da lahko povežete metode, ki se bodo samodejno klicale, ko se pozove delegat, ki se nanje sklicuje. Preprosto morate ustvariti predmet delegata in dodeliti metode eno za drugo v verigo z uporabo operaterja "+ =". Način lahko tudi odstranite z uporabo operaterja "- =".
Funkcije, ki delegatu dodajajo dodatno fleksibilnost, so kovarianca in kontraviancija. Kovarianca in Contravariance dovoljujeta, da se vrsto vrnitve in podpis metode, ki je dodeljena delegatu, razlikujejo od tipa delegata.
- Kovarianca vam omogoča, da delegatu dodelite metodo, kjer je vrnitev metode metoda, ki je izpeljana iz razreda, ki določa vrsto vrnitve delegata.
- Contravariance vam omogoča, da delegatu dodelite metodo, pri kateri je tip parametra metode osnovni razred razreda, ki je podan kot parameter delegata.
Opredelitev dogodkov
Dogodki so izvedeno dejanje, ki spremeni stanje objekta. Dogodki so razglašeni z delegati, brez prisotnosti delegatov pa ne morete prijaviti dogodkov. Lahko rečemo, da dogodek delegatom posreduje enkapsulacijo. Obstajata dve pomembni sestavini pri obravnavanju dogodkov, ki sta prireditev dogodka in dogodka. Če so predmeti zainteresirani za dogodek, potem registrira organizator dogodka za ta dogodek. In vsakič, ko so dogodki odpuščeni, se kličejo registrirani upravljavci dogodkov. Izjava o dogodku je naslednja:
dogodek event_delegate event_name;
Tukaj je »dogodek« ključna beseda, ki prikazuje deklaracijo dogodka. Naprej, event_delegate prikaže ime pooblaščenca, ki podpira dogodek. Nato je ime dogodka ime dogodka
Obstajajo nekatere pomembne točke, ki jih je treba zapomniti pri obravnavanju dogodkov. Tako kot delegati so lahko dogodki tudi multicast, tj. Več objektov, ki so vezani (registrirani) na upravljalnik dogodkov, se odzovejo, ko je dogodek dvignjen. Upravljavci dogodkov se lahko dodajo v verigo z uporabo operaterja “+ =” in se lahko razrežejo z uporabo operaterja “- =” Statična in primerna metoda se lahko uporabita kot manipulator dogodkov. Dostop do dogodkov vam lahko da nadzor nad izvajanjem seznama upravljalnika dogodkov.
Vmesnik lahko vsebuje dogodke. Dogodki so lahko tudi abstraktni, medtem ko dogodek, ki temelji na dostopu, ne more biti abstrakten. Dogodek je lahko virtualen in ga preglasi izpeljani razred.
Ključne razlike med delegati in dogodki v C #
- Delegat je objekt, ki se uporablja kot kazalec funkcije, ki zadrži referenco metode. Po drugi strani pa dogodki delegatom dajejo abstrakcijo.
- Ključna beseda, ki je potrebna za razglasitev delegata, je delegat, medtem ko je ključna beseda, potrebna za razglasitev dogodka, dogodek .
- Delegat je razglašen izven razreda, medtem ko je dogodek deklariran znotraj razreda.
- Za priklic metode z delegatskim objektom je treba metodo prenesti na predmet delegata. Po drugi strani pa za priklic metode, ki uporablja objekt dogodka, je treba metodo napotiti na objekt dogodka.
- Covariance in Contravariance zagotavljata dodatno fleksibilnost za delegirane objekte. Po drugi strani pa dogodek nima takih konceptov.
- Event Accessor obravnava seznam obdelovalcev dogodkov, medtem ko delegat nima takega koncepta.
- Delegati so neodvisni od dogodkov, vendar dogodkov ni mogoče ustvariti brez delegata.
Sklep:
Delegati so koristni, ker podpirajo dogodke in zagotavljajo možnost izvajanja metode med izvajanjem. Dostop do dogodkov nam omogoča sinhronizacijo upravljavcev dogodkov v večopravnih aplikacijah.