Preporučeno, 2020

Izbor Urednika

Razlika između delegata i događaja u C #

i delegati i događaji igraju važnu ulogu u programu vođenom događajima. Delegati se mogu pozvati na metodu, a vrlo je sličan pokazivaču funkcije u C ++. Događaji obavještavaju da je izvršena neka radnja. Osnovna razlika između delegata i događaja je u tome što delegati drže referencu metoda, a događaj pruža način pristupa tom metodu pomoću delegata.

Tablica usporedbe

Osnova za usporedbudelegatiDogađaji
Osnovni, temeljniDelegat drži referencu metode.Događaj je višeslojna apstrakcija koja se daje delegatima.
Sintaksadelegat return_type delegate_name (parametar_list);događaj event_delegate event_name;
RiječDelegat je deklariran pomoću ključne riječi "delegat".Događaj se proglašava pomoću ključne riječi "događaj".
DeklaracijaIzaslanik se proglašava izvan bilo kojeg razreda.Događaj je deklariran unutar klase.
prizvatiZa pozivanje na metodu mora se uputiti delegatu.Za pozivanje metode mora biti dodijeljen događaju.
Kovarijanca i kontravijancijaOni pružaju fleksibilnost delegatima.Nema takvog koncepta.
Pristupnik događajaNema takvog koncepta.Upravlja popisom rukovatelja događaja.
zavisnostDelegati su neovisni o događajima.Događaj ne može biti izrađen bez delegata.

Definicija delegata

U C # delegati se koriste kao pokazivač funkcije za upućivanje metode. To je konkretno objekt koji se odnosi na metodu koja mu je dodijeljena. Isti delegat može se koristiti za upućivanje različitih metoda, jer je sposoban držati referencu različitih metoda, ali jedan po jedan. Koja metoda će biti pozvana od strane delegata određuje se u vrijeme izvođenja. Sintaksa deklariranja delegata je sljedeća:

 delegat return_type delegate_name (parametar_list); 

Ovdje return_type objavljuje vrstu vrijednosti koju vraća metoda, koja se poziva delegatom i delegate_ime je ime delegata. Parametar_list definira popis parametara potrebnih metodama koje će pozvati delegat.

O delegatima treba zapamtiti neke važne točke. Može pozvati bilo koju metodu koja odgovara njegovom potpisu i vrsti povratka. Delegat može nazvati metodu instance ili statičku metodu. Ako pozove metodu instance, mora uzeti pomoć objekta kako bi pozvala metodu. Delegati podržavaju višesmjerno odašiljanje, tj. Možete povezati metode koje će se automatski pozivati ​​kada se pozove delegat koji se poziva na njih. Jednostavno morate stvoriti objekt delegata i dodijeliti metode jedan za drugim lancu pomoću operatora "+ =". Također možete ukloniti metodu pomoću "- =" operatora.

Karakteristike koje delegatu dodaju dodatnu fleksibilnost su kovarijancija i kontravijancija. Covariance i Contravariance dopuštaju stanje u kojem se tip povratka i potpis metode dodijeljene delegatu razlikuju od tipa delegata.

  • Covariance vam omogućuje da dodijelite metodu delegatu gdje je povratni tip metode klasa koja je izvedena iz klase koja određuje tip povratka delegata.
  • Contravariance vam omogućuje da dodijelite metodu delegatu gdje je tip parametra metode osnovna klasa klase koja je specificirana kao parametar delegata.

Definicija događaja

Događaji su izvršena radnja koja mijenja stanje objekta. Događaji se proglašavaju delegatima, bez prisustva delegata ne možete prijaviti događaje. Može se reći da događaj daje delegatima enkapsulaciju. Postoje dva važna spoja kada se radi o događajima koji su događaj i događaj. Ako su objekti zainteresirani za događaj, tada registrira rukovatelja događaja za taj određeni događaj. I kad god su događaji ispaljeni, pozivaju se registrirani rukovatelji događajima. Izjava o događaju je sljedeća:

 događaj event_delegate event_name; 

Ovdje je "događaj" ključna riječ koja prikazuje deklaraciju događaja. Dalje, event_delegate prikazuje ime delegata koji podržava događaj. Zatim, event_name je naziv događaja

Postoje neke važne točke koje treba zapamtiti dok se bavite događajima. Kao i delegati, događaji također mogu biti multicast tj. Više objekata koji su vezani (registrirani) za rukovatelja događaja, reagiraju kada je događaj podignut. Rukovatelji događajima mogu se dodati u lanac korištenjem operatora "+ =" i mogu se ukloniti pomoću operatora "- =" I statička i metoda instance mogu se koristiti kao rukovatelj događajima. Event accessor vam može dati kontrolu nad implementacijom popisa rukovatelja događaja.

Sučelje može sadržavati događaje. Događaji također mogu biti apstraktni, dok događaj koji se temelji na pristupu ne može biti apstraktan. Događaj može biti virtualan i nadjačan izvedenom klasom.

Ključne razlike između delegata i događaja u C #

  1. Delegat je objekt koji se koristi kao pokazivač funkcije za držanje reference metode. S druge strane, događaji delegatima daju apstrakciju.
  2. Ključna riječ koja je potrebna za deklariranje delegata je delegat, dok je ključna riječ koja je potrebna za prijavu događaja događaj .
  3. Delegat je deklariran izvan klase, dok je događaj deklariran unutar klase.
  4. Za pozivanje metode pomoću delegatskog objekta, metoda mora biti upućena na objekt delegata. S druge strane, za pozivanje metode pomoću objekta događaja, metoda se mora pozvati na objekt događaja.
  5. Covariance i Contravariance pružaju dodatnu fleksibilnost delegiranim objektima. S druge strane, događaj nema takvih pojmova.
  6. Event Accessor upravlja s popisom događaja, dok delegat nema takav koncept.
  7. Delegati su neovisni o događajima, ali događaji se ne mogu kreirati bez delegata.

Zaključak:

Delegati su korisni jer podržavaju događaje i pružaju mogućnost izvršavanja metode u vrijeme izvođenja. Pristupni događaj nam omogućuje da sinkroniziramo rukovatelje događajima u višedretvenim aplikacijama.

Top