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

  • O que está doendo por estar lá? Você terá que adicioná-lo novamente mais tarde, quando achar a necessidade de passar os argumentos do evento? Provavelmente …
  • Eu só pensei nisso como uma conveniência para me poupar algum esforço ao escrever a aula. Mas você ' está absolutamente certo em que poderia mudar mais tarde (provavelmente ganhou ' t, mas ainda assim …), e seria uma mudança significativa, então posso muito bem fazer certo da primeira vez. Obrigado!
  • Nesse caso específico, não ' é mais normal usar PropertyChangedEventArgs e -Handler e passe como argumento o nome da propriedade? Ou este é apenas um exemplo ruim?
  • Meu código pode ser um exemplo ruim, mas eu estava puxando meu design e convenções de nomenclatura de algumas classes .NET, que usam os EventArgs padrão e a nomenclatura alterada.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *