
Sammenligningstabel
Grundlag for sammenligning | delegerede | Begivenheder |
---|---|---|
Grundlæggende | En delegat har referencen til en metode. | Begivenheden er en overlagret abstraktion, der leveres til delegaterne. |
Syntaks | delegere return_type delegate_name (parameter_list); | begivenhed event_delegate event_name; |
Søgeord | En delegat erklæres ved hjælp af et søgeord "delegeret". | En begivenhed erklæres ved hjælp af et søgeord "begivenhed". |
Erklæring | En delegeret erklæres uden for nogen klasse. | En begivenhed er erklæret inde i en klasse. |
Invoke | For 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 Contravariance | De giver fleksibilitet til delegaterne. | Intet sådant begreb. |
Event Accessor | Intet sådant begreb. | Administrerer listen over hændelseshandlere. |
Afhængighed | Delegater 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 #
- 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.
- 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 .
- En delegeret erklæres udenfor en klasse, mens en begivenhed er erklæret inde i en klasse.
- 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.
- Covariance og Contravariance giver ekstra fleksibilitet til de delegerede objekter. På den anden side har begivenheden ingen sådanne begreber.
- Event Accessor håndterer listen over begivenhedshåndteringer, mens delegeret ikke har noget sådant begreb.
- 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.