2008-10-29 12 views
5

Jaki jest sens standardowego wzorca dla delegatów wydarzeń w .net? To znaczy. Predefiniowany delegat EventHandler? Dlaczego nie wybrać najbardziej odpowiedniego podpisu dla tego wymogu?Wzór sygnatury zdarzenia w .net

Edycja: A ponadto, czy konieczne jest niewolniczo podążanie za przykładem Microsoftu we wszystkich przypadkach?

Odpowiedz

3

To głównie dla spójności i na wersji z sender paramater jak zawsze System.Object a parametr args jak zawsze System.EventArgs lub jego dervied klasa, można zmienić argument nadawcy przekazany do niej, jak również zmiany typ EventArgs, nie łamiąc żadnego istniejącego kodu.

Cały idiota zdarzeń .NET został zaprojektowany do obsługi programowania komponentowego, w którym kod wywołujący nie jest kontrolowany przez programistę komponentu ze zdarzeniami.

2

Oddziela dzwoniącego od wywoływacza.

3

To jest dobre pytanie. Heretyczny, ale dobry. Czytałem niedawno wpis na blogu (nie mogę znaleźć linku - czy ktoś ma ten link), który obalał mit, że zawsze trzeba przesłonić System.EventArgs, aby zapewnić dobrą obsługę zdarzeń.

Jestem za konwencją i przestrzegam zasad, ale to jest ta, którą uważam za możliwą do zgrania - jeśli nie da się jej uniknąć. Konieczność ciągłego przeskakiwania System.EventArgs dla każdego zdarzenia dodaje do sprzężenia rutyny - teraz jest jeszcze jedna rzecz do zapamiętania.

Posiadanie "e", które zapewnia członków, nie jest bardziej pomocne i intuicyjne niż dobrze nazwany zestaw argumentów. Nie sądzę, że można wygrać argument, by wysłać zalecany wzorzec System.EventArg, ale wstawiłbym się z tobą, by przedstawić ten argument.

rp

4

w C# 1.0 konwencja nie sprawiają, że wiele sensu. W C# 2.0, gdzie występuje pewna liczba wariancji delegatów, ma to więcej sensu.

Jeśli masz metodę obsługi zdarzeń, która nie dba o parametry, np.

public void SaveDocument(object sender, EventArgs args) 
{ 
    // Save the document here 
} 

można teraz użyć tej metody, aby zapisać się do wszelkich zdarzeniach, które następuje po konwencji, nawet jeżeli rzeczywisty nadawca lub args są bardziej ściśle wpisane. Oznacza to, że możesz użyć tego samego programu obsługi do zdarzenia klawiatury, kliknięcia przycisku itp.

Powiązane problemy