Udostępnij za pośrednictwem


Wprowadzenie do delegatów i zdarzeń w języku C#

Delegaci udostępniają mechanizm późnego powiązania na platformie .NET. Opóźnione wiązanie (Late Binding) oznacza, że tworzysz algorytm, w którym wywołujący dostarcza również co najmniej jedną metodę implementującą część algorytmu.

Rozważmy na przykład sortowanie listy gwiazd w aplikacji astronomicznej. Możesz posortować te gwiazdy według ich odległości od ziemi lub wielkości gwiazdy lub ich postrzeganej jasności.

We wszystkich tych przypadkach metoda Sort() zasadniczo działa tak samo: rozmieszcza elementy na liście na podstawie porównania. Kod porównujący dwie gwiazdki jest inny dla każdej kolejności sortowania.

Tego rodzaju rozwiązania były używane w oprogramowaniu od pół wieku. Koncepcja delegata języka C# zapewnia obsługę języka pierwszej klasy i bezpieczeństwo typów wokół koncepcji.

Jak zobaczysz w dalszej części tej serii, kod języka C#, który piszesz dla algorytmów, takich jak ten typ, jest bezpieczny. Kompilator zapewnia, że typy argumentów i typy zwracane są zgodne.

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. Za pomocą wskaźników funkcji można określić różne konwencje.

Cele projektowania języka dla delegatów

Projektanci języka wymienili kilka celów dotyczących cechy, która ostatecznie przekształciła się w delegaty.

Zespół chciał mieć wspólną konstrukcję języka, która może być używana dla dowolnych algorytmów powiązania opóźnionego. Delegaci umożliwiają deweloperom poznanie jednej koncepcji i użycie tej samej koncepcji w wielu różnych problemach z oprogramowaniem.

Po drugie, zespół chciał obsługiwać zarówno wywołania metod pojedynczych, jak i multicastowych. (Delegaty multicastowe to delegaty, które łączą wiele wywołań metod. Przykłady zobaczysz w dalszej części tej serii.)

Zespół chciał, aby delegaci wspierali bezpieczeństwo typów, którego deweloperzy oczekują od wszystkich elementów języka C#.

Na koniec zespół uznał, że wzorzec zdarzenia jest specyficznym wzorcem, w którym delegaty lub algorytm opóźnionego wiązania są przydatne. Zespół chciał upewnić się, że kod dla delegatów może stanowić podstawę wzorca zdarzeń platformy .NET.

Wynikiem tej pracy była obsługa delegatów i zdarzeń w języku C# i platformie .NET.

W pozostałych artykułach tej serii omówimy cechy językowe, obsługę bibliotek i idiomy typowe dla pracy z delegatami i zdarzeniami. Dowiesz się więcej o:

  • Słowo delegate kluczowe i kod, który generuje.
  • Funkcje w System.Delegate klasie i sposób ich użycia.
  • Jak utworzyć delegatów bezpiecznych typów.
  • Jak utworzyć metody, które można wywołać za pomocą delegatów.
  • Jak pracować z delegatami i zdarzeniami przy użyciu wyrażeń lambda.
  • Jak delegaty stają się jednym z bloków konstrukcyjnych LINQ.
  • Sposób, w jaki delegaty stanowią podstawę wzorca zdarzeń .NET oraz na czym polegają ich różnice.

Zacznijmy.

Dalej