Udostępnij za pośrednictwem


Delegaty (Przewodnik programowania w języku C#)

Delegat to typ reprezentujący odwołania do metod z określoną listą parametrów i zwracanym typem.Podczas tworzenia wystąpienia delegata można skojarzyć jego wystąpienie z dowolną metodą mającą zgodny podpis i zwracany typ.Za pośrednictwem wystąpienia delegata można wywołać metodę.

Delegaty służą do przekazywania metod jako argumentów do innych metod.Programy obsługi zdarzeń to po prostu metody, które są wywoływane za pośrednictwem delegatów.Użytkownik tworzy metodę niestandardową, a klasa, taka jak formant systemu Windows, może wywołać tę metodę, gdy wystąpi określone zdarzenie.W poniższym przykładzie pokazano deklarację delegata:

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

Do delegata można przypisać każdą metodę z dowolnej dostępnej klasy lub struktury, która pasuje do typu delegata.Może to być metoda statyczna lub metoda wystąpienia.Umożliwia to programowe zmienianie wywołań metod, a także podłączanie nowego kodu do istniejących klas.

[!UWAGA]

W kontekście przeciążania metod podpis metody nie zawiera wartości zwracanej.Jednak w kontekście delegatów podpis zawiera wartość zwracaną.Innymi słowy metoda musi mieć taki sam zwracany typ jak delegat.

Ta możliwość odwoływania się do metody jak do parametru sprawia, że delegaty idealnie nadają się do definiowania metod wywoływania zwrotnego.Na przykład odwołanie do metody, która porównuje dwa obiekty można przekazać jako argument do algorytmu sortowania.Kod porównania znajduje się w osobnej procedurze, więc algorytm sortowania można napisać w bardziej ogólny sposób.

Omówienie delegatów

Delegaty mają następujące właściwości:

  • Delegaty są podobne do wskaźników funkcji w języku C++, ale są bezpieczne dla typów.

  • Delegaty zezwalają na przekazywanie metod jako parametrów.

  • Delegatów można używać do definiowania metod wywoływania zwrotnego.

  • Delegaty można łączyć w łańcuch; na przykład w jednym zdarzeniu można wywołać wiele metod.

  • Metody nie muszą dokładnie pasować do typu delegata.Aby uzyskać więcej informacji, zobacz Korzystanie z wariancji w delegatach (C# i Visual Basic).

  • W języku C# w wersji 2.0 wprowadzono koncepcję metod anonimowych, która umożliwia przekazywanie jako parametrów bloków kodu, zamiast oddzielnie definiowanej metody.W języku C# 3.0 wprowadzono wyrażenia lambda, które stanową wygodniejszy sposób pisania bloków kodu w tekście.Zarówno metody anonimowe, jak i wyrażenia lambda (w pewnych kontekstach) są kompilowane na typy delegatów.Te funkcje są obecnie nazywane łącznie funkcjami anonimowymi.Aby uzyskać więcej informacji dotyczących wyrażeń lambda, zobacz Funkcje anonimowe (Przewodnik programowania w języku C#).

W tej sekcji

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Polecane rozdziały książki

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

Delegates and Events w Learning C# 3.0: Master the fundamentals of C# 3.0

Zobacz też

Informacje

Zdarzenia (Przewodnik programowania w języku C#)

Delegate

Koncepcje

Przewodnik programowania w języku C#