2011-12-29 13 views
60

Ostatnio się zastanawiałam, czy istnieje znacząca różnica pomiędzy tym kodem:klienta Podprogram vs. EventHandler <EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

A ten:

public delegate void MyEventHandler(object sender, MyEventArgs e); 
public event MyEventHandler SomeEvent; 

oba robią to samo i Nie byłem w stanie powiedzieć żadnej różnicy. Chociaż zauważyłem, że większość klas architektury .NET Framework używa niestandardowego delegata obsługi zdarzeń dla swoich zdarzeń. Czy istnieje ku temu szczególny powód?

Odpowiedz

67

Masz rację; oni robią to samo. Tak więc prawdopodobnie powinieneś preferować ten pierwszy, ponieważ jest on bardziej przejrzysty i wymaga mniej pisania.

Powodem, dla którego wiele klas .NET Framework ma swój własny, niestandardowy deleger obsługi zdarzeń, jest to, że zostały napisane przed wprowadzeniem generycznych (które zezwalały na skróconą składnię) w wersji 2.0. Na przykład prawie wszystkie biblioteki WinForms zostały napisane przed generycznymi, a w tamtych czasach ta ostatnia forma była sposobem robienia rzeczy.

+0

Dziękuję za odpowiedź. Ułatwiło mi to sprawę. – haiyyu

-1

Drugi sposób daje większą elastyczność i bezpieczeństwo typu. Jest mniej metod z odpowiednim podpisem => mniej miejsca na błąd. Niestandardowy delegat pozwala określić dokładnie potrzebne parametry (lub określić nikogo) - brak kultowego ładunku nadawcy + args.

+1

Ciekawe, dlaczego jest to odrzucane, wydaje się być całkowicie rozsądną korzyścią dla niestandardowych programów obsługi zdarzeń. – Cerzi