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

Delegát je typ, který představuje odkazy na metody s konkrétním seznamem parametrů a návratovým typem.A delegate is a type that represents references to methods with a particular parameter list and return type. 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.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Metodu můžete vyvolat (nebo volat) prostřednictvím instance delegátu.You can invoke (or call) the method through the delegate instance.

Delegáty se používají pro předávání metod jako argumentů jiným metodám.Delegates are used to pass methods as arguments to other methods. Ovladače událostí nejsou nic jiného než metody, které jsou vyvolány prostřednictvím delegátů.Event handlers are nothing more than methods that are invoked through delegates. 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.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. Následující příklad znázorňuje deklaraci delegátu.The following example shows a delegate declaration:

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.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. Metoda může být buď statická, anebo se jedná o metodu instance.The method can be either static or an instance method. 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.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Poznámka

V kontextu přetížení metody nezahrnuje podpis metody návratovou hodnotu.In the context of method overloading, the signature of a method does not include the return value. V kontextu delegátů však podpis zahrnuje návratovou hodnotu.But in the context of delegates, the signature does include the return value. Jinými slovy to znamená, že metoda musí mít stejný návratový typ jako delegát.In other words, a method must have the same return type as the delegate.

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í.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. Například odkaz na metodu, která srovnává dva objekty, lze jako argument předat algoritmu řazení.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Vzhledem k tomu, že srovnávací kód je součástí samostatné procedury, lze algoritmus řazení napsat obecnějším způsobem.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Přehled delegátůDelegates Overview

Delegáty mají následující vlastnosti:Delegates have the following properties:

  • Delegáti jsou podobní ukazatelům C++ funkce, ale Delegáti jsou plně objektově orientované a na C++ rozdíl od ukazatelů na členské funkce, delegáty zapouzdřují instanci objektu i metodu.Delegates are similar to C++ function pointers, but delegates are fully object-oriented, and unlike C++ pointers to member functions, delegates encapsulate both an object instance and a method.

  • Delegáty umožňují předávání metod jako parametrů.Delegates allow methods to be passed as parameters.

  • Delegáty lze použít pro definování metod zpětného volání.Delegates can be used to define callback methods.

  • Delegáty lze zřetězit; například je možné volat větší počet metod v rámci jediné události.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • Metody nemusí přesně odpovídat typu delegátu.Methods do not have to match the delegate type exactly. Další informace naleznete v tématu použití variance v delegátech.For more information, see Using Variance in Delegates.

  • C#verze 2,0 představila koncept anonymních metod, které umožňují, aby byly bloky kódu předány jako parametry namísto samostatně definované metody.C# version 2.0 introduced the concept of anonymous methods, which allow code blocks to be passed as parameters in place of a separately defined method. Verze 3.0 jazyka C# představila výrazy lambda jako přesnější způsob psaní bloků vloženého kódu.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. Anonymní metody i výrazy lambda (v určitých kontextech) se kompilují na typy delegátů.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Tyto funkce se souhrnně označují jako anonymní funkce.Together, these features are now known as anonymous functions. Další informace o výrazech lambda naleznete v tématu lambda Expressions.For more information about lambda expressions, see Lambda expressions.

V tomto oddíluIn This Section

Specifikace jazyka C#C# Language Specification

Další informace naleznete v tématu Delegáti ve C# specifikaci jazyka.For more information, see Delegates in the C# Language Specification. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.The language specification is the definitive source for C# syntax and usage.

Delegáti, události a výrazy lambda v C# 3,0 kuchařka, třetí vydání: Více než 250 řešení pro C# 3,0 programátoryDelegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegáti a události ve C# studiu 3,0: Hlavní základy C# 3,0Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Viz také:See also