Anbefalt, 2024

Redaksjonens

Forskjell mellom delegater og hendelser i C #

Brukelegater og hendelser spiller begge en viktig rolle i det eventdrevne programmet. Delegasjonene kan henvise til en metode, og det er ganske lik funksjonspekeren i C ++. Hendelser informerer om at noen tiltak har blitt utført. Den grunnleggende forskjellen mellom delegater og hendelser er at delegatene holder referansen til metodene, og hendelsen gir en måte å få tilgang til den metoden ved hjelp av delegater.

Sammenligningstabel

Grunnlag for sammenligningdelegaterarrangementer
grunn~~POS=TRUNCEn delegat refererer til en metode.Arrangementet er en overlagret abstraksjon levert til delegatene.
syntaxdelegere return_type delegate_name (parameter_list);hendelse event_delegate event_name;
søkeordEn delegat er erklært ved hjelp av et søkeord "delegat".En begivenhet er deklarert ved hjelp av et søkeord "arrangement".
ErklæringEn delegat er erklært utenfor en hvilken som helst klasse.En begivenhet er deklarert i en klasse.
PåkallFor å påkalle en metode må den henvises til delegaten.For å påkalle en metode må den tilordnes arrangementet.
Covariance og ContravarianceDe gir fleksibilitet til delegatene.Ingen slik konsept.
Event AccessorIngen slik konsept.Administrerer listen over hendelsesbehandlere.
avhengighetDelegater er uavhengige av hendelser.Hendelsen kan ikke opprettes uten delegerte.

Definisjon av delegater

I C # -delegere brukes som funksjonspeker for å referere til en metode. Det er spesielt et objekt som refererer til en metode som er tildelt den. Samme delegat kan brukes til å referere til forskjellige metoder, da det er i stand til å holde referansen til forskjellige metoder, men en om gangen. Hvilken metode som skal påberopes av delegaten, bestemmes ved kjøretiden. Syntaxen for å erklære en delegat er som følger:

 delegere return_type delegate_name (parameter_list); 

Her, return_type erklærer typen verdi returnert av metoden, som kalles av delegert og delegate_name er navnet på delegaten. Parameterlisten definerer listen over parametere som kreves av metodene som blir kalt av delegaten.

Det er noen viktige poeng å bli husket om delegatene. Det kan ringe hvilken som helst metode som samsvarer med signaturen og returtypen. En delegat kan ringe både en instansmetode eller en statisk metode. Hvis det kalles en instansmetode, må den ta hjelp av objektet for å påkalle metoden. Delegater støtter multicasting, dvs. at du kan koble opp metodene som vil bli automatisk kalt når delegatene henvender seg til dem er påkalt. Du må bare lage et delegatobjekt og tilordne metodene en etter en til kjeden med "+ =" operatøren. Du kan også fjerne en metode med "- =" operatør.

Funksjonene som gir ekstra fleksibilitet til delegaten er Covariance og Contravariance. Covariance og Contravariance tillater tilstanden der returtypen og signaturen til metoden som er tildelt til å delegere, er forskjellige fra den som er delegert.

  • Covariance tillater deg å tilordne en metode til delegaten hvor returmetoden til metoden er en klasse som er avledet fra klassen som spesifiserer avdelingenes returtype.
  • Contravariance tillater deg å tilordne en metode til delegaten der parametertypen av metoden er en grunnklasse av klassen som er angitt som parameter for delegaten.

Definisjon av hendelser

Hendelser er den utførte handlingen som endrer tilstanden til et objekt. Hendelser blir erklært ved hjelp av delegater, uten tilstedeværelse av delegater du ikke kan erklære hendelser. Du kan si at en hendelse gir innkapsling til delegatene. Det er to viktige forbindelser når det gjelder hendelser som er hendelses- og hendelseshandler. Hvis objektene er interessert i arrangementet, registrerer det en hendelsehandler for den aktuelle hendelsen. Og når hendelsene blir sparket, blir de registrerte hendelseshåndtererne kalt. Erklæringen av arrangementet er som følger:

 hendelse event_delegate event_name; 

Her er "arrangement" et søkeord som viser erklæringen av en hendelse. Deretter viser event_delegate navnet på den delegaten som støtter hendelsen. Deretter er event_name navnet på arrangementet

Det er noen viktige poeng å bli husket mens du håndterer hendelsene. Som delegater kan hendelser også være multicast, dvs. flere objekter som er koblet sammen (registrert) til en hendelsehandler, svarer når en hendelse blir hevet. Arrangementhåndtererne kan legges til kjeden ved å bruke operatøren "+ =" og kan bli ukjent ved bruk av operatøren "- =" Både statisk og instansmetode kan brukes som hendelseshåndterer. Event Accessor kan gi deg kontroll over implementeringen av hendelseshåndteringslisten.

Grensesnittet kan inneholde hendelser. Hendelser kan også være abstrakte, mens tilgangsbasert arrangement ikke kan være abstrakt. Arrangementet kan være virtuelt og overstyres av avledet klasse.

Viktige forskjeller mellom delegater og hendelser i C #

  1. Delegat er et objekt som brukes som en funksjonspeker for å holde referansen til en metode. På den annen side gir hendelser en abstraksjon til delegater.
  2. Et nøkkelord som kreves for å erklære en delegat er en delegat, mens et nøkkelord som kreves for å erklære en hendelse, er hendelse .
  3. En delegat er erklært utenfor en klasse mens en begivenhet er deklarert i en klasse.
  4. For å påberope en metode ved hjelp av et delegatobjekt, må metoden henvises til delegatobjektet. På den annen side, for å påberope en metode ved hjelp av et hendelsesobjekt, må metoden henvises til hendelsesobjektet.
  5. Covariance og Contravariance gir ekstra fleksibilitet til de delegerte objektene. På den annen side har arrangementet ingen slike konsepter.
  6. Event Accessor håndterer listen over hendelseshåndterere mens delegat ikke har noe slikt konsept.
  7. Delegatene er uavhengige av hendelser, men hendelser kan ikke opprettes uten delegert.

Konklusjon:

Delegater er nyttige som de støtter hendelser, og de gir anlegget for å utføre metoden ved kjøring. Hendelsesaksessoren lar oss synkronisere hendelseshåndteringsprogrammet i multithreading-applikasjoner.

Top