Udostępnij za pośrednictwem


Delegaty (Przewodnik programowania w języku C#)

delegat jest typem, który reprezentuje odwołania do metod z określoną listą parametrów i typem zwracanym. Gdy tworzysz wystąpienie delegata, możesz skojarzyć instancję delegata z dowolną metodą, która ma zgodny podpis i zwracany typ. Metodę można wywołać (lub wywołać) za pośrednictwem wystąpienia delegata.

Delegaty są używane do przekazywania metod jako argumentów do innych metod. Procedury obsługi zdarzeń to zasadniczo metody, które są wywoływane za pośrednictwem delegatów. Podczas tworzenia metody niestandardowej klasa, taka jak kontrolka systemu Windows, może wywołać metodę po wystąpieniu określonego zdarzenia.

W poniższym przykładzie przedstawiono deklarację delegata:

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

Możesz przypisać dowolną metodę z dowolnej dostępnej klasy lub struktury, która jest zgodna z typem delegata, do delegata. Metoda może być statyczna lub instancyjna. Elastyczność umożliwia programowe zmienianie wywołań metod lub podłączanie nowego kodu do istniejących klas.

Notatka

W kontekście przeciążenia metody podpis metody nie zawiera wartości zwracanej. Jednak w kontekście delegatów podpis zawiera wartość zwracaną. Innymi słowy, metoda musi mieć typ zwracany zgodny z typem zadeklarowanym przez delegata.

Możliwość odwoływania się do metody jako parametru sprawia, że delegaty idealnie nadają się do definiowania metod wywołania zwrotnego. Możesz napisać metodę, która porównuje dwa obiekty w aplikacji. Następnie metodę można użyć jako delegat dla algorytmu sortowania. Ponieważ kod porównania jest oddzielony od biblioteki, metoda sortowania może być bardziej ogólna.

wskaźniki funkcji obsługują podobne scenariusze, w których potrzebujesz większej kontroli nad konwencją wywołań. Kod skojarzony z pełnomocnikiem jest wywoływany przy użyciu metody wirtualnej dodanej do typu delegata. Podczas pracy ze wskaźnikami funkcji można określić różne konwencje.

Eksplorowanie cech delegatów

Delegaty mają następujące cechy:

  • Delegaty umożliwiają przekazywanie metod jako parametrów.
  • Delegaci mogą służyć do definiowania metod wywołania zwrotnego.
  • Delegaty mogą być połączone w łańcuch, na przykład wywołanie wielu metod w jednym zdarzeniu.
  • Metody nie muszą dokładnie odpowiadać typowi delegata. Aby uzyskać więcej informacji, zobacz Using Variance in Delegates.
  • Wyrażenia lambda to bardziej zwięzły sposób pisania kodu w pojedynczych liniach. Wyrażenia lambda (w niektórych kontekstach) są kompilowane w celu delegowania typów. Aby uzyskać więcej informacji na temat wyrażeń lambda, zobacz wyrażenia lambda.

Aby uzyskać więcej informacji na temat delegatów, zobacz następujące artykuły:

Uzyskiwanie dostępu do specyfikacji języka C#

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