Delegaty (Przewodnik programowania w języku C#)Delegates (C# Programming Guide)

Delegat jest typem, który reprezentuje odwołania do metod z określoną listą parametrów i zwracanym typem.A delegate is a type that represents references to methods with a particular parameter list and return type. Podczas tworzenia wystąpienia delegata można skojarzyć jego wystąpienie z dowolną metodą mającą zgodny podpis i zwracany typ.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Za pośrednictwem wystąpienia delegata można wywołać metodę.You can invoke (or call) the method through the delegate instance.

Delegaty służą do przekazywania metod jako argumentów do innych metod.Delegates are used to pass methods as arguments to other methods. Programy obsługi zdarzeń to po prostu metody, które są wywoływane za pośrednictwem delegatów.Event handlers are nothing more than methods that are invoked through delegates. Użytkownik tworzy metodę niestandardową, a klasa, taka jak formant systemu Windows, może wywołać tę metodę, gdy wystąpi określone zdarzenie.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. W poniższym przykładzie pokazano deklarację delegata:The following example shows a delegate declaration:

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.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. Może to być metoda statyczna lub metoda wystąpienia.The method can be either static or an instance method. Umożliwia to programowe zmienianie wywołań metod, a także podłączanie nowego kodu do istniejących klas.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Uwaga

W kontekście przeciążania metod podpis metody nie zawiera wartości zwracanej.In the context of method overloading, the signature of a method does not include the return value. Jednak w kontekście delegatów podpis zawiera wartość zwracaną.But in the context of delegates, the signature does include the return value. Innymi słowy metoda musi mieć taki sam zwracany typ jak delegat.In other words, a method must have the same return type as the delegate.

Ta możliwość odwoływania się do metody jak do parametru sprawia, że delegaty idealnie nadają się do definiowania metod wywoływania zwrotnego.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. Na przykład odwołanie do metody, która porównuje dwa obiekty można przekazać jako argument do algorytmu sortowania.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Kod porównania znajduje się w osobnej procedurze, więc algorytm sortowania można napisać w bardziej ogólny sposób.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Omówienie delegatówDelegates Overview

Delegaty mają następujące właściwości:Delegates have the following properties:

  • Delegaty są podobne C++ do wskaźników funkcji, ale Delegaty są w pełni zorientowane obiektowo i C++ w przeciwieństwie do wskaźników do funkcji składowych, Delegaty hermetyzują zarówno wystąpienie obiektu, jak i metodę.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.

  • Delegaty zezwalają na przekazywanie metod jako parametrów.Delegates allow methods to be passed as parameters.

  • Delegatów można używać do definiowania metod wywoływania zwrotnego.Delegates can be used to define callback methods.

  • Delegaty można łączyć w łańcuch; na przykład w jednym zdarzeniu można wywołać wiele metod.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • Metody nie muszą dokładnie pasować do typu delegata.Methods do not have to match the delegate type exactly. Aby uzyskać więcej informacji, zobacz Korzystanie z wariancji w delegatach.For more information, see Using Variance in Delegates.

  • C#w wersji 2,0 wprowadzono koncepcję metod anonimowych, która umożliwia przekazywanie bloków kodu jako parametrów zamiast oddzielnie zdefiniowanej 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. W języku C# 3.0 wprowadzono wyrażenia lambda, które stanową wygodniejszy sposób pisania bloków kodu w tekście.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. Zarówno metody anonimowe, jak i wyrażenia lambda (w pewnych kontekstach) są kompilowane na typy delegatów.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Te funkcje są obecnie nazywane łącznie funkcjami anonimowymi.Together, these features are now known as anonymous functions. Aby uzyskać więcej informacji na temat wyrażeń lambda, zobacz lambda Expressions.For more information about lambda expressions, see Lambda expressions.

W tej sekcjiIn This Section

Specyfikacja języka C#C# Language Specification

Aby uzyskać więcej informacji, Delegaci zobacz Delegaty w C# specyfikacji języka.For more information, see Delegates in the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Delegaty, zdarzenia i wyrażenia lambda w C# 3,0 Cookbook, wydanie trzecie: Ponad 250 rozwiązań dla C# programistów 3,0Delegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegaci i zdarzenia w uczeniu C# 3,0: Główne podstawy C# 3,0Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Zobacz takżeSee also