Úvod do delegátů a událostí v jazyce C#

Delegáti poskytují mechanismus pozdní vazby v .NET. Pozdní vazba znamená, že vytvoříte algoritmus, ve kterém volající také poskytuje alespoň jednu metodu, která implementuje část algoritmu.

Zvažte například řazení seznamu hvězd v aplikaci astronomie. Můžete se rozhodnout, že tyto hvězdy seřadíte podle jejich vzdálenosti od země, nebo velikost hvězdy nebo jejich vnímaného jasu.

Ve všech těchto případech metoda Sort() dělá v podstatě totéž: uspořádá položky v seznamu na základě určitého porovnání. Kód, který porovnává dvě hvězdičky, se pro každé pořadí řazení liší.

Tyto druhy řešení se používaly v softwaru po půl století. Koncept delegáta jazyka C# poskytuje podporu jazyka první třídy a bezpečnost typů kolem konceptu.

Jak uvidíte později v této sérii, kód jazyka C#, který píšete pro algoritmy, jako je tento typ, je bezpečný. Kompilátor zajišťuje, aby se typy shodovaly s argumenty a návratovými typy.

Ukazatele funkcí podporují podobné scénáře, kdy potřebujete větší kontrolu nad konvencí volání. Kód přidružený k delegátu se vyvolá pomocí virtuální metody přidané do typu delegáta. Pomocí ukazatelů funkce můžete zadat různé konvence.

Cíle návrhu jazyka pro delegáty

Návrháři jazyků vyčíslili několik cílů funkce, která se nakonec stala delegáty.

Tým chtěl vytvořit společný jazyk, který by se dal použít pro jakékoli algoritmy pozdní vazby. Delegáti umožňují vývojářům naučit se jeden koncept a používat stejný koncept napříč mnoha různými problémy se softwarem.

Za druhé, tým chtěl podporovat volání metody jednosměrového i vícesměrového vysílání. (Delegáti vícesměrového vysílání jsou delegáti, kteří zřetězují více volání metod. Příklady uvidíte později v této sérii.)

Tým chtěl, aby delegáti podporovali stejnou bezpečnost typů, kterou vývojáři očekávají ze všech konstruktorů jazyka C#.

Nakonec tým rozpoznal vzor události je jeden konkrétní vzor, ve kterém jsou užitečné delegáty nebo jakýkoli algoritmus pozdní vazby. Tým chtěl zajistit, aby kód delegátů mohl poskytnout základ pro vzor událostí .NET.

Výsledkem veškeré práce byla podpora delegáta a události v jazyce C# a .NET.

Zbývající články v této sérii se týkají jazykových funkcí, podpory knihovny a běžných idiomů používaných při práci s delegáty a událostmi. Dozvíte se o:

  • Klíčové delegate slovo a kód, který generuje.
  • Funkce ve System.Delegate třídě a způsob jejich použití.
  • Vytvoření delegátů bezpečných typů
  • Jak vytvořit metody, které lze vyvolat prostřednictvím delegátů.
  • Jak pracovat s delegáty a událostmi pomocí výrazů lambda
  • Jak se delegáti stanou jedním z stavebních bloků pro LINQ.
  • Jak jsou delegáti základem vzoru událostí .NET a jak se liší.

Pojďme na to.

Další