// dev.hobby.pl

Delegat jako parametr w C# – pułapka bez komunikatu

Streszczenie wpisu i odnośnik do pełnej treści u źródła.

Delegat jako parametr w C# – pułapka bez komunikatu

TL;DR

Kompilator C# widzi w sygnaturze metody typ delegata, ale wcale nie sprawdza, czy metoda faktycznie go wywoła. Można napisać PerformSilently(SongDelegate song), zapomnieć o linijce song() w środku ciała metody i wszystko skompiluje się bez jednego ostrzeżenia. Program uruchomi się, nic się nie wydarzy, a szukanie przyczyny takiej ciszy potrafi zająć więcej czasu niż zwykły wyjątek z czerwonym stack trace'em.

Dwie kolejne pułapki kompilator już łapie – niezgodna liczba parametrów kończy się błędem CS1503, a zły typ zwracany błędem CS0407 – tylko komunikaty bywają nieoczywiste dla kogoś, kto pierwszy raz układa sobie wzorzec Strategy albo Callback. Artykuł rozkłada to wszystko na przykładzie orkiestry grającej utwory i pokazuje, dlaczego zgodność sygnatury delegata to nie formalność, tylko fundament, na którym stoją eventy, LINQ i połowa bibliotek .NET.

Delegat jako parametr metody w C#: kod się kompiluje, sygnatura się zgadza, a mimo to nic się nie dzieje. Pełny przykład z Orchestra.Perform, CS1503 i CS0407." etap: "Etap 06: Zaaw...

Czytaj cały wpis u źródła

// tagi

// powiązane wpisy