Anbefalet, 2024

Redaktørens Valg

Forskel mellem delegerede og begivenheder i C #

Brugelegater og begivenheder spiller begge en vigtig rolle i det event-driven program. Delegaterne kan henvise til en metode, og det svarer meget til funktionspegeren i C ++. Arrangementer meddeler, at der er udført nogle handlinger. Den grundlæggende forskel mellem delegerede og begivenheder er, at delegerede holder referencen til metoderne, og arrangementet giver mulighed for at få adgang til denne metode ved hjælp af delegerede.

Sammenligningstabel

Grundlag for sammenligningdelegeredeBegivenheder
GrundlæggendeEn delegat har referencen til en metode.Begivenheden er en overlagret abstraktion, der leveres til delegaterne.
Syntaksdelegere return_type delegate_name (parameter_list);begivenhed event_delegate event_name;
SøgeordEn delegat erklæres ved hjælp af et søgeord "delegeret".En begivenhed erklæres ved hjælp af et søgeord "begivenhed".
ErklæringEn delegeret erklæres uden for nogen klasse.En begivenhed er erklæret inde i en klasse.
InvokeFor at påberåbe sig en metode skal den henvises til delegaten.For at påberåbe sig en metode skal den tildeles arrangementet.
Covariance og ContravarianceDe giver fleksibilitet til delegaterne.Intet sådant begreb.
Event AccessorIntet sådant begreb.Administrerer listen over hændelseshandlere.
AfhængighedDelegater er uafhængige af begivenheder.Arrangementet kan ikke oprettes uden delegerede.

Definition af delegerede

I C # er delegerede brugt som funktionspeger for at henvise til en metode. Det er specifikt et objekt, der refererer til en metode, der er tildelt den. Den samme delegat kan bruges til at henvise til forskellige metoder, da den er i stand til at holde referencen til forskellige metoder, men en ad gangen. Hvilken metode vil blive påberåbt af delegeret, bestemmes i runtime. Syntaxen for at erklære en delegat er som følger:

 delegere return_type delegate_name (parameter_list); 

Her erklærer return_type den type værdi, der returneres af metoden, som kaldes af delegeret og delegatnavn er navnet på den delegerede. Parameterlisten definerer listen over parametre, der kræves af de metoder, der skal kaldes af delegaten.

Der er nogle vigtige punkter at blive husket om delegaterne. Det kan kalde enhver metode, der matcher til sin underskrift og returtype. En delegat kan kalde både en instansmetode eller en statisk metode. Hvis det kalder en instansmetode, skal den tage hjælp af objektet til at påberåbe sig metoden. Delegater understøtter multicasting, dvs. du kan kæde op de metoder, der automatisk bliver kaldt, når den delegerede henviser til dem påberåbes. Du skal simpelthen oprette et delegatobjekt og tildele metoderne efter hinanden til kæden ved hjælp af "+ =" operatøren. Du kan også fjerne en metode ved hjælp af "- =" operatøren.

De funktioner, der tilføjer delegeret ekstra fleksibilitet, er Covariance og Contravariance. Covariance og Contravariance tillader den betingelse, hvor tilbageleveringstypen og underskrift af den metode, der er udpeget til at uddelegere, er forskellig fra dennes delegerede.

  • Covariance giver dig mulighed for at tildele en metode til den delegerede, hvor metodenes returtype er en klasse, der er afledt af klassen, der specificerer delegatets returtype.
  • Contravariance giver dig mulighed for at tildele en metode til den delegerede, hvor parametertypen af ​​metoden er en klasseklasse af klassen, der er angivet som parameter for delegeret.

Definition af begivenheder

Begivenheder er den handling, der udføres, som ændrer tilstanden for et objekt. Begivenheder erklæres ved hjælp af delegerede, uden tilstedeværelse af delegerede, du kan ikke erklære begivenheder. Du kan sige, at en begivenhed giver indkapsling til delegaterne. Der er to vigtige forbindelser, når man beskæftiger sig med begivenheder, der er begivenhed og event handling. Hvis objekterne er interesserede i arrangementet, registrerer den en hændelseshandler for den pågældende begivenhed. Og når begivenhederne bliver affyret, kaldes de registrerede hændelseshåndterere. Erklæringen af ​​arrangementet er som følger:

 begivenhed event_delegate event_name; 

Her er "begivenhed" et søgeord, der viser erklæringen af ​​en begivenhed. Derefter viser event_delegate navnet på den delegerede, der understøtter arrangementet. Derefter er event_name navnet på arrangementet

Der er nogle vigtige punkter, der skal huskes under behandlingen af ​​begivenhederne. Som delegerede kan begivenheder også være multicast, dvs. flere objekter, der er kædet (registreret) til en begivenhedshandler, svarer, når en begivenhed er hævet. Hændelseshåndteringen kan tilføjes til kæden ved hjælp af operatøren "+ =" og kan ikke hentes ved hjælp af operatøren "- =" Både statisk og instansmetode kan bruges som hændelseshandler. Hændelsesadgangen kan give dig kontrol over implementeringen af ​​hændelseshandlerlisten.

Interfacet kan indeholde begivenheder. Begivenheder kan også være abstrakte, mens adgangsbaseret begivenhed ikke kan være abstrakt. Begivenheden kan være virtuel og overstyres af afledt klasse.

Nøgleforskelle mellem delegerede og begivenheder i C #

  1. Delegat er et objekt, der bruges som en funktionspeger for at holde referencen til en metode. På den anden side giver begivenhederne en abstraktion til delegerede.
  2. Et nøgleord, der kræves for at erklære en delegat, er en delegeret, mens et søgeord, der kræves for at erklære en begivenhed, er begivenhed .
  3. En delegeret erklæres udenfor en klasse, mens en begivenhed er erklæret inde i en klasse.
  4. For at påberåbe sig en metode ved hjælp af et delegatobjekt, skal metoden henvises til delegatobjektet. På den anden side skal metoden henvises til hændelsesobjektet for at påberåbe sig en metode ved hjælp af et hændelsesobjekt.
  5. Covariance og Contravariance giver ekstra fleksibilitet til de delegerede objekter. På den anden side har begivenheden ingen sådanne begreber.
  6. Event Accessor håndterer listen over begivenhedshåndteringer, mens delegeret ikke har noget sådant begreb.
  7. Delegater er uafhængige af begivenheder, men begivenheder kan ikke oprettes uden delegerede.

Konklusion:

Delegater er nyttige, da de understøtter begivenheder, og de giver mulighed for at udføre metoden ved kørsel. Hændelsesadgangen giver os mulighed for at synkronisere hændelseshåndteringen i multithreading-applikationer.

Top