Standardowi delegaci w C#

W dzisiejszym poście postanowiłem krótko przedstawić definicje wybranych delegatów, które standardowo udostępnia nam .NET. Dla przypomnienia – delegat to typ danych, który utożsamia się z konkretną sygnaturą funkcji. Możemy je stosować np. do przekazywania funkcji jako parametr wywołania innej funkcji.

Można się bardzo łatwo obejść bez wiedzy zawartej w tym poście. Definicja nowego delegatu to zazwyczaj trywialna sprawa. Pomyślałem jednak, że warto jest być świadomym tego, co już jest dostępne. Dzięki temu nie będziemy dokładać sobie niepotrzebnej pracy i wprowadzać duplikujących się delegatów. Bardzo istotne jest, że nie zachodzi konwersja pomiędzy dwoma różnymi delegatami mimo, że ich sygnatura jest identyczna. Musimy o tym pamiętać projektując interfejs, który będzie dostępny dla innych. Prosty przykład stanowi poniższy kod, który wyrzuci błąd w trakcie kompilacji.

Poniżej znajdują się krótkie opisy najbardziej popularnych delegatów.

Action

Generyczny delegat odpowiadający funkcji, która nie zwraca nic (void) i jest wywoływana z dowolną liczbą parametrów.

Func

Bardzo podobny do delegata Action. Z jedną różnicą – funkcje zwracają tutaj konkretny typ danych.

Predicate

Specyficzny przypadek Func. Odpowiada funkcjom zwracającym bool’a.

Converter

Reprezentuje funkcję konwertującą obiekt z jednego typu na drugi.

Comparison

Odpowiada funkcji porównującej dwa obiekty tego samego typu. Najcześciej stosowany na potrzeby sortowania kolekcji elementów danego typu.

EventHandler

Zazwyczaj używany jest tam gdzie pojawiają się definicje eventów. Określa sygnaturę funkcji, którą można zasubskrybować do eventu.

Oczywiście wszystkich delegatów jest znacznie więcej. Wybrałem tylko te, które moim zdaniem znajdują największe zastosowanie. Jeżeli pominąłem jakiś, który powinien się tutaj znaleźć, proszę o informację w komentarzu.

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *