Zastanawiam się w jakich sytuacjach faktycznie zachodzi potrzeba definiowania własnych delegatów albo ich krótszej odmiany zdarzeń?
Zdarzenia to nie jest krótsza odmiana delegata!
Delegat jest takim jakby wskaźnikiem na metodę, natomiast zdarzenie jest wbudowaną w język obsługą wzorca Obserwator. Delegaty służą do wskazania zdarzeniu, które metody ma wykonać w momencie swojego wystąpienia.
Czy jest praktyczne korzystanie z takich ułatwień jak wyrażenia lambda i metody anonimowe? Czy może są to jedynie cukierki składniowe, które należy traktować jako ciekawostkę?
Chociażby całe LINQ jest oparte na lambdach, jakże moglibyśmy ich nie używać?
Czy prawidłowe jest stosowanie zdarzenia zdefiniowanego w klasie w sytuacji, kiedy chcemy informować zewnętrzną metodę o stanie obiektu np. "wystąpił błąd połączenia z bazą" albo "nieprawidłowe hasło dla połączenia" czy lepiej wtedy zastosować zwyczajną metodę Error() czy coś w tym rodzaju?
Zdarzenia służą do informowania raczej o zmianach stanu obiektu. Jeśli mamy jakiś obiekt połączony z bazą, i nagle następuje przerwanie tego połączenia, to jak najbardziej możemy użyć zdarzenia, do poinformowania jakichś tam innych obiektów o tym. Ale to wszystko zależy od konkretnego przypadku, więc nie zawsze zdarzenie w tym momencie ma sens. Zazwyczaj połączenie z bazą jest krytyczne dla działania aplikacji, więc w przypadku jego zgubienia lepiej rzucić wyjątek.