Many people neglect C# delegates because they cannot find a reason to use them. On the other hand, there is (rather small) group of people who overuse delegates in code that could be easily replaced by literal method call. So when should we use delegates? Well, they show their real power in situations when we need a mechanism to easily switch from one logic to another, without changing our application’s core code. Sounds ok but what does it mean in a real life? It’s time for a fairy tale 😊. Imagine...
Sztuka programowania 2457 dni, 1 godzinę, 48 minut temu 117 źrodło rozwiń
Ale jak, ale gdzie?!?!? Wspominałem wcześniej o delegatach wbudowanych w język C#. W dzisiejszym wpisie zaprezentuję delegaty...
Daj się poznać 2017 2786 dni, 17 godzin, 52 minuty temu 114 źrodło rozwiń
Zaczęło się od delegata… Jest to pierwszy wpis, prowadzący do Lambda expressions. Zaczynamy od delegates, ponieważ od tego zaczął microsoft. Jeśli znasz język C, delegaty można porównać do wskaźników. Są one jakby jedno-metodowym interfejsem, który wskazuje jak mają wyglądać funkcje przypisane do nich. Sygnatura delegata wskazuje jednoznacznie, jakie sygnatury muszą posiadać metody których chcemy wraz z nim użyć. Jeśli zdefiniujemy go w taki sposób:delegate void DateTimeShower(Date...
Daj się poznać 2017 2805 dni, 59 minut temu 87 źrodło rozwiń
Zastanawiałeś się kiedyś po co przy deklaracji delegata wymagane jest podawanie nazw zmiennych nawet jeśli nie są do niczego potrzebne? Weźmy np prostego delegata przyjmującego 2 inty i zwracającego inta: public delegate int SimpleDelegate(int x, int y); Jeśli zdefiniujemy sobie takiego delegata gdzieś w programie to przecież nie używamy nigdzie tych zmiennych: SimpleDelegate d = new SimpleDelegate(SomeFunction); Więc czemu nie można zadeklarować delegata np w taki sposób? (kompilator nie ...
Sztuka programowania 4517 dni, 21 godzin, 27 minut temu 129 źrodło rozwiń
Pora na wielowątkowość! W najbliższych postach zajmę się wielowątkowością w C#. Jednak zanim przejdę do "prawdziwych" watków (z przestrzeni System.Threading), najpierw asynchroniczne delegaty. Asynchroniczne delegaty Delegata można utożsamiać ze wskaźnikiem na funkcję z zachowaniem bezpieczeństwa typów. Takiego delegata można wywołać synchronicznie i asynchronicznie. Asynchroniczne wywołanie delegata daje takie same rezultaty jak utworzenie nowego wątku a jest nawet prostrze! Jak się okaże, wystar...
Sztuka programowania 4517 dni, 21 godzin, 27 minut temu 304 źrodło rozwiń
Zdarzenia oraz delegaty (tak to chyba się tłumaczy?) pełnią podobną funkcje w C#. Jaka jest jednak różnica? Przyjrzyjmy się sposobowi ich użycia:class Program { publicstaticevent EventHandler SimpleEvent =null; publicstatic EventHandler SimpleDelegate =null; staticvoid Main(string[] args) { SimpleEvent+=new EventHandler(EventMethod); SimpleDelegate +=new EventHandler(DelegateMethod); SimpleEvent(null, null); SimpleDelegate(null, null); } staticvoid D...
Możliwość używania delegatów w C# to fajna rzecz. Przyjemne jest zwłaszcza definiowanie ich "w locie", czyli bez konieczności tworzenia zupełnie nowej funkcji. Takiego delegata nazywamy wówczas anonimowym: