Doporučená, 2021

Redakce Choice

Rozdíl mezi delegáty a událostmi v jazyce C #

useelegates a události hrají důležitou roli v programu řízeném akcí. Delegáti mohou odkazovat na metodu, a to je docela podobný funkční ukazatel v C ++. Události upozorňují, že byla provedena nějaká akce. Základní rozdíl mezi delegáty a událostmi je, že delegáti drží odkaz na metody a událost poskytuje způsob přístupu k této metodě pomocí delegátů.

Srovnávací graf

Základ pro porovnáníDelegátiUdálosti
ZákladníDelegát má odkaz na metodu.Událost je nadstandardní abstrakce poskytovaná delegátům.
Syntaxdelegate return_type delegate_name (parametr_list);event_delegate event_name;
Klíčové slovoDelegát je deklarován pomocí klíčového slova „delegát“.Událost je deklarována pomocí klíčového slova „událost“.
ProhlášeníDelegát je deklarován mimo jakoukoli třídu.Událost je deklarována uvnitř třídy.
VyvolejteK uplatnění metody musí být postoupena delegátovi.Chcete-li vyvolat metodu, musí být události přiřazena.
Covariance a ContravariancePoskytují delegátům flexibilitu.Žádný takový koncept.
Event AccessorŽádný takový koncept.Spravuje seznam obsluh událostí.
ZávislostDelegáti jsou nezávislí na událostech.Událost nelze vytvořit bez delegátů.

Definice delegátů

V C # delegáti jsou používány jako ukazatel funkce odkazovat na metodu. Je to konkrétně objekt, který odkazuje na metodu, která je mu přiřazena. Stejného delegáta lze použít k odkazu různých metod, protože je schopen držet odkaz různých metod, ale po jednom. Která metoda bude vyvolána delegátem je určena při běhu programu. Syntaxe deklarování delegáta je následující:

 delegate return_type delegate_name (parametr_list); 

Zde return_type deklaruje typ hodnoty vrácené metodou, která je volána delegátem a jméno delegate_name je jméno delegáta. Parametr_list definuje seznam parametrů požadovaných metodami, které budou volány delegátem.

O delegátech je třeba mít na paměti několik důležitých bodů. Může volat jakoukoli metodu, která odpovídá jeho podpisu a typu návratu. Delegát může volat metodu instance nebo statickou metodu. Pokud zavolá metodu instance, musí použít metodu objektu k vyvolání metody. Delegáti podporují vícesměrové vysílání, tj. Můžete řetězovat metody, které budou automaticky vyvolány při vyvolání delegáta, který na ně odkazuje. Jednoduše musíte vytvořit delegovaný objekt a přiřadit metody jeden po druhém do řetězce pomocí operátoru „+ =“. Metodu můžete také zrušit pomocí operátoru „- =“.

Prvky, které delegátovi dodávají větší flexibilitu, jsou Covariance a Contravariance. Covariance a Contravariance povolují podmínku, kdy se typ návratu a podpis metody přidělené delegátům liší od typu delegáta.

  • Covariance vám umožňuje přiřadit metodu delegátovi, kde typ návratu metody je třída, která je odvozena od třídy, která určuje návratový typ delegáta.
  • Contravariance umožňuje přiřadit metodu delegátovi, kde typ parametru metody je základní třídou třídy, která je zadána jako parametr delegáta.

Definice událostí

Události jsou provedené akce, které mění stav objektu. Události jsou prohlášeny za použití delegátů, bez přítomnosti delegátů, které nelze vyhlásit. Můžete říci, že událost poskytuje zapouzdření delegátům. Při práci s událostmi, které jsou obsluhou událostí a událostí, existují dvě důležité sloučeniny. Pokud se o událost zajímají, zaregistruje obslužnou rutinu události pro danou událost. A kdykoliv jsou události spuštěny, zavolá se registrovaná obsluha událostí. Prohlášení o události je následující:

 event_delegate event_name; 

Zde je „událost“ klíčové slovo, které ukazuje prohlášení události. Dále event_delegate zobrazí název delegáta, který událost podporuje. Pak je event_name název události

Při jednání s událostmi je třeba mít na paměti několik důležitých bodů. Podobně jako delegáti mohou být události také multicast, tj. Více objektů, které jsou zřetězeny (registrovány) obslužnou rutinou události, reagují při vyvolání události. Obslužné rutiny událostí mohou být přidány k řetězci pomocí operátoru „+ =“ a mohou být zrušeny pomocí operátoru „- =“. Statická i instanční metoda může být použita jako obsluha události. Přístupový modul události vám může poskytnout kontrolu nad implementací seznamu obsluhy událostí.

Rozhraní může obsahovat události. Události mohou být také abstraktní, zatímco událost založená na přístupovém prvku nemůže být abstraktní. Událost může být virtuální a může být přepsána odvozenou třídou.

Klíčové rozdíly mezi delegáty a událostmi v jazyce C #

  1. Delegát je objekt, který se používá jako ukazatel funkce k držení odkazu metody. Na druhou stranu události poskytují delegátům abstrakci.
  2. Klíčové slovo požadované pro prohlášení delegáta je delegát, zatímco klíčové slovo požadované pro vyhlášení události je událost .
  3. Delegát je deklarován mimo třídu, zatímco událost je deklarována uvnitř třídy.
  4. Chcete-li vyvolat metodu pomocí objektu delegát, musí být metoda odkazována na objekt delegáta. Na druhou stranu pro vyvolání metody využívající objekt události musí být metoda odkazována na objekt události.
  5. Covariance a Contravariance poskytují objektům delegátů mimořádnou flexibilitu. Naproti tomu událost nemá takové koncepty.
  6. Event Accessor zpracovává seznam obsluh událostí, zatímco delegát nemá takový koncept.
  7. Delegáti jsou nezávislí na událostech, ale události nelze vytvořit bez delegáta.

Závěr:

Delegáti jsou užiteční, protože podporují události a poskytují možnost provádění metody za běhu. Přístup k událostem nám umožňuje synchronizovat obsluhy událostí v aplikacích s více podprocesy.

Top