Ilekroć definiuję własne wydarzenia, używam wzorca takiego jak poniższy (który uważam , że jest zalecany przez MSDN robi to):
public class MyEventClass { private bool _value; // Backing variable public bool Value { get { return _value; } set { if (value != _value) // Only raise event if value is changed/different { _value = value; OnValueChanged(EventArgs.Empty); } } } public event EventHandler ValueChanged; // Anything can subscribe to the event protected void OnValueChanged(EventArgs e) // Only this and children can invoke event { if (ValueChanged != null) ValueChanged(this, e); } }
Tak więc kod klienta musi po prostu zasubskrybować zdarzenie i działa automagicznie.
Jednak wydaje się uciążliwe przekazywanie parametru EventArgs e
, w szczególności w przypadku klasy, która używa EventHandler do zgłaszania swoich zdarzeń, ponieważ baza EventArgs nie zawiera żadnych danych, a jedynie EventArgs.Empty
.
Czy zmiana tego na to nie byłaby uznana za faux pas?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Komentarze
Odpowiedź
Czy to źle? Nie. Czy spowoduje to, że ludzie będą narzekać na Twój kod? Nie.
Czy zajmie się tym zajętym programistą na kilka minut, gdy będzie próbował dowiedzieć się, jakie są parametry i czy pomogą one rozwiązać jego problem? Może…
Czy uczyni to twoją klasę łatwiejszą w użyciu …?
Standardy i wzorce są przydatne, ponieważ są łatwo rozpoznawane i używane (lub ignorowane). Odstępstwo od konwencji powinno mieć określony cel, a nie tylko dlatego, że możesz. Dotyczy to niezależnie od tego, czy jest to styl nawiasów, nazwy parametrów czy lista argumentów. Zrób to z jakiegoś powodu, a nie tylko dlatego, że się kompiluje.
PropertyChangedEventArgs
i-Handler
i przekazać jako argument nazwę właściwości? A może to tylko zły przykład?