Sdílet prostřednictvím


Delegáti (Průvodce programováním v C#)

Delegát je typ, který představuje odkazy na metody se seznamem konkrétních parametrů a návratovým typem.Pokud vytvoříte instanci delegátu, můžete příslušnou instanci přidružit s jakoukoli metodou s kompatibilním podpisem a návratovým typem.Metodu můžete vyvolat (nebo volat) prostřednictvím instance delegátu.

Delegáty se používají pro předávání metod jako argumentů jiným metodám.Ovladače událostí nejsou nic jiného než metody, které jsou vyvolány prostřednictvím delegátů.Můžete vytvořit vlastní metodu a konkrétní třída, jako je ovládací prvek Windows, může volat vaši metodu, pokud dojde k určité události.Následující příklad znázorňuje deklaraci delegátu.

public delegate int PerformCalculation(int x, int y);

Delegátu lze přiřadit jakoukoli metodu z jakékoli přístupné třídy nebo struktury odpovídající typu delegátu.Metoda může být buď statická, anebo se jedná o metodu instance.Díky tomu je možné programově změnit volání metody a vložit nový kód do stávajících tříd.

[!POZNÁMKA]

V kontextu přetížení metody nezahrnuje podpis metody návratovou hodnotu.V kontextu delegátů však podpis zahrnuje návratovou hodnotu.Jinými slovy to znamená, že metoda musí mít stejný návratový typ jako delegát.

Díky této možnosti odkazovat na metodu jako parametr jsou delegáty ideální pro definování metod zpětného volání.Například odkaz na metodu, která srovnává dva objekty, lze jako argument předat algoritmu řazení.Vzhledem k tomu, že srovnávací kód je součástí samostatné procedury, lze algoritmus řazení napsat obecnějším způsobem.

Přehled delegátů

Delegáty mají následující vlastnosti:

  • Delegáty odpovídají ukazatelům funkcí jazyka C++, jsou však typově bezpečné.

  • Delegáty umožňují předávání metod jako parametrů.

  • Delegáty lze použít pro definování metod zpětného volání.

  • Delegáty lze zřetězit; například je možné volat větší počet metod v rámci jediné události.

  • Metody nemusí přesně odpovídat typu delegátu.Další informace naleznete v tématu Použití odchylek v delegátech (C# and Visual Basic).

  • Verze 2.0 jazyka C# představila koncept Anonymní metody, která umožňuje předávání bloků kódu jako parametrů, namísto samostatně definované metody.Verze 3.0 jazyka C# představila výrazy lambda jako přesnější způsob psaní bloků vloženého kódu.Anonymní metody i výrazy lambda (v určitých kontextech) se kompilují na typy delegátů.Tyto funkce se souhrnně označují jako anonymní funkce.Další informace o výrazech lambda naleznete v tématu Anonymní funkce (Průvodce programováním v C#).

V tomto oddílu

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Doporučené kapitoly knihy

Delegates, Events, and Lambda ExpressionsC# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegates and EventsLearning C# 3.0: Master the fundamentals of C# 3.0

Viz také

Referenční dokumentace

Události (Průvodce programováním v C#)

Delegate

Koncepty

Průvodce programováním v C#