Em um manipulador de eventos C #, por que o parâmetro "remetente" deve ser um objeto?
De acordo comDiretrizes de nomenclatura de eventos da Microsoft, asender
parâmetro em um manipulador de eventos C # "ésempre do tipo de objeto, mesmo que seja possível usar um tipo mais específico ".
Isso leva a muitos códigos de manipulação de eventos como:
RepeaterItem item = sender as RepeaterItem;
if (item != null) { /* Do some stuff */ }
Por que a convenção aconselha contra declarar um manipulador de eventos com um tipo mais específico?
MyType
{
public event MyEventHander MyEvent;
}
...
delegate void MyEventHander(MyType sender, MyEventArgs e);
Estou perdendo uma pegadinha?
Para a posteridade: concordo com o sentimento geral nas respostas de que a convençãoé para usar o objeto (e para passar dados viaEventArgs
) mesmo quando é possível usar um tipo mais específico, e na programação do mundo realé importante seguir a convenção.