Siempre que estoy definiendo mis propios eventos, uso un patrón como el siguiente (que creo es como recomienda MSDN haciéndolo):
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); } }
Por lo tanto, el código del cliente solo necesita suscribirse al evento y funciona automáticamente.
Sin embargo, Se siente incómodo pasar el parámetro EventArgs e
, en particular con una clase que usa EventHandler para generar sus eventos, ya que el EventArgs base no tiene datos, solo EventArgs.Empty
.
¿Se consideraría un paso en falso cambiarlo a esto?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Comentarios
Responder
¿Está mal? No. ¿Hará que la gente se queje de tu código? No.
¿Puede distraer a algún desarrollador ocupado durante un par de minutos mientras intenta averiguar cuáles son los parámetros y si ayudarán a resolver su problema? Podría ser …
¿Hará que su clase sea más fácil de usar …?
Los estándares y patrones son útiles porque se reconocen y usan fácilmente (o se ignoran). Desviarse de las convenciones debe hacerse con un propósito, no solo porque se puede. Esto se aplica si se trata de estilo de corchetes, nombres de parámetros o lista de argumentos. Hágalo por una razón, no solo porque se compila.
PropertyChangedEventArgs
y un-Handler
y pasar como argumento el nombre de la propiedad? ¿O es solo un mal ejemplo?