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.

questionAnswers(12)

yourAnswerToTheQuestion