Sempre que estou definindo meus próprios eventos, uso um padrão como o seguinte (que acredito é como o MSDN recomenda fazendo isso):
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); } }
Assim, o código do cliente só precisa se inscrever no evento e funciona automaticamente.
No entanto, parece complicado passar o parâmetro EventArgs e
, em particular com uma classe que usa EventHandler para aumentar seus eventos, já que o EventArgs base não tem dados, apenas EventArgs.Empty
.
Seria considerado um passo em falso alterá-lo para isso?
protected void OnValueChanged() { if (ValueChanged != null) ValueChanged(this, EventArgs.Empty); }
Comentários
Resposta
Está errado? Não. Isso fará com que as pessoas reclamem do seu código? Não.
Isso desviará algum desenvolvedor ocupado por alguns minutos enquanto ele tenta descobrir quais são os parâmetros e se eles ajudarão a resolver seu problema? Pode ser ..
Isso tornará sua classe mais fácil de usar …?
Padrões e padrões são úteis porque são facilmente reconhecidos e usados (ou ignorados). O desvio das convenções deve ser feito por um propósito, não apenas porque você pode. Isso se aplica seja no estilo de colchetes, nomes de parâmetros ou lista de argumentos. Faça isso por um motivo, não apenas porque ele compila.
PropertyChangedEventArgs
e-Handler
e passe como argumento o nome da propriedade? Ou este é apenas um exemplo ruim?