Delegaty C#: 5 smaków

C#

Func ActionSmak NR.1

Dlaczego znowu piszę o delegatach. Otóż widzę, że wiele osób wchodzi na mojego bloga, by się dowiedzieć “co to jest i jak to działa”. W 2011 roku, na szybko napisałem pewien wpis, który swoim przykładem miał zobrazować zależności wynikające z mechanizmu delegaty. W wielkim skrócie wpis mijał się z celem.

Dlatego postanowiłem napisać kolejny wpis o delegatach bez żadnych udziwnień.

Postanowiłem też w tym wpisie poruszyć ważne zagadnienie, które jest reprezentowane przez gotowe delegaty jak “Action<T>” i Func<T,T>.

PredicateSmak NR.2

Predicate to gotowy szablon delegaty/wskaźnika do metody.

Metoda referowana w Predicate musi zwrócić wartość true/false.

Spełnia ona inną role niż klasyczne szablony delegat jak “Action” i “Func”, które opisałem wcześniej. Pytania brzmi na czym polega różnica.

Możesz sobie zadać pytanie dlaczego w ogóle z nich korzystać. Dla czytelności systemu może łatwiej jest użyć delegaty Func<T,Bool>. Dlaczego Predicate w ogóle istnieje?

ConverterSmak NR.3Przerobiliśmy 3 z 5 szablonów gotowych generycznych delegat. Zostały nam jeszcze dwa. A w tym wpisie opiszę delegatę Converter.

Nie ma w niej niczego specjalnego. Jest to kolejna delegata, która istnieje z powodu starego kodu .NET 2.0 sprzed LINQ.

Celem tej delegaty jest przekonwertowanie jednego obiektu w drugi. Od razu rodzi się pytanie po co używać do tego oddzielnej delegaty gdy mamy delegatę Func.

ComparisonSmak NR.4

Podobnie jak delegaty: Predicate, Converter - delegata Comparsion istnieje głównie po to, by dać możliwość kolekcjom Array i List<T> możliwość sortowania.

Obecnie jednak nie korzystam z metody Sort, tylko z metody LINQ OrderBy.

Używanie delegaty tak, jak w poprzednich przypadkach nie ma sensu. Sama delegata istnieje dla metod np. Sort.

Wszystkie Kategorie