Я читал эту страницу и заметил, что это стандартные рекомендации:
В рекомендациях .NET Framework указано, что тип делегата, используемый для события, должен принимать два параметра: параметр «источник объекта», указывающий на источник события, и параметр «e», который инкапсулирует любую дополнительную информацию о событии.
Я могу понять, как object sender
может быть полезным в одних обстоятельствах, но в других я мог видеть прямо противоположное. Например,
Что, если класс, обрабатывающий событие, не должен знать, кто его инициировал? Связь, сплоченность и все такое.
В моем случае у меня уже есть ссылка на объект как на переменную-член. Так я подписываюсь на мероприятие. Всегда будет только один его экземпляр, поэтому нет причин приводить объект-отправитель, а не просто использовать переменную-член.
В моей программе объект-отправитель вообще не должен быть известен клиентам. Трудно объяснить, что я делаю, но в основном у меня есть класс с внутренним конструктором в библиотеке, который используется двумя другими классами также в этой библиотеке. Мои клиентские классы подписываются на события из этих двух классов, но события изначально вызываются из этого внутреннего класса, о котором клиенты не должны знать.
Это сбивает с толку клиентов обработчика событий. Библиотеки должны быть простыми для понимания, и в моем случае нет причин использовать переменную отправителя. Никто. Тогда зачем его включать?
При этом, почему Microsoft указывает, что обработчики событий должны следовать этим рекомендациям? Разве это не всегда лучший выбор?
РЕДАКТИРОВАТЬ: Всем спасибо за ответы. Я решил пойти с большинством и использовать EventHandler<T>
для всех своих мероприятий в этой библиотеке.
object sender
- person Ryan Peschel   schedule 25.09.2011