Ogni volta che definisco i miei eventi, utilizzo uno schema come il seguente (che credo sia il modo consigliato da MSDN farlo):
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); } }
Quindi, il codice client deve solo iscriversi allevento e funziona automaticamente.
Tuttavia, funziona sembra complicato passare il parametro EventArgs e
, in particolare con una classe che utilizza EventHandler per aumentare i propri eventi, poiché EventArgs di base non ha dati, solo EventArgs.Empty
.
Sarebbe considerato un passo falso cambiarlo in questo?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Commenti
Risposta
È sbagliato? No. Le persone si lamenteranno del tuo codice? No.
Distruggerà uno sviluppatore impegnato per un paio di minuti mentre cerca di scoprire quali sono i parametri e se aiuteranno a risolvere il suo problema? Potrebbe essere ..
Renderà la tua classe più facile da usare …?
Standard e modelli sono utili perché sono facilmente riconoscibili e usati (o ignorati). Deviare dalle convenzioni dovrebbe essere fatto per uno scopo, non solo perché puoi. Questo si applica se si tratta di stile parentesi, nomi di parametri o elenco di argomenti. Fallo per un motivo, non solo perché si compila.
PropertyChangedEventArgs
e-Handler
e passare come argomento il nome della proprietà? O è solo un cattivo esempio?