Согласно рекомендациям Microsoft по присвоению имен событиям, параметр sender
в обработчике событий С# "всегда имеет тип объекта, даже если можно использовать более конкретный тип".
Это приводит к большому количеству кода обработки событий, например:
RepeaterItem item = sender as RepeaterItem;
if (item != null) { /* Do some stuff */ }
Почему соглашение не рекомендует объявлять обработчик событий с более конкретным типом?
MyType
{
public event MyEventHander MyEvent;
}
...
delegate void MyEventHander(MyType sender, MyEventArgs e);
Я скучаю по Гоче?
Для потомков: я согласен с общим мнением в ответах, что соглашение состоит в том, чтобы использовать объект (и передавать данные через EventArgs
), даже когда возможно использовать более конкретный тип, и в программировании реального мира это важно соблюдать конвенцию.
Изменение: приманка для поиска: RSPEC-3906 правило "Обработчики событий должны иметь правильную подпись"