Почему анализ кода рекомендует, чтобы первым параметром события был отправитель объекта, а не более конкретный тип?

Какова причина CA1009 (http://msdn.microsoft.com/en-us/library/ms182133.aspx) что «отправитель» всегда должен быть «объектом»?

Например, у меня есть класс Car, который генерирует события Moved. Я не хочу, чтобы события Moved генерировались из каких-либо других классов. Я полагаю, что большинство событий относятся к определенной иерархии классов, так почему же правило не допускает никаких исключений?


person noctonura    schedule 26.09.2014    source источник
comment
Откуда вы знаете, что это была машина? Мог быть пешеходом. Может быть самолет. Тебе не должно быть до этого дела, важно только то, что что-то сдвинулось. Если вы хотите знать, какой конкретный объект перемещен, все, что вам нужно, - это ссылочная идентификация. Объект для этого достаточно хорош.   -  person Hans Passant    schedule 27.09.2014
comment
Полагаю, это по историческим причинам. События восходят к .NET 1.0, у которого еще не было универсальных шаблонов.   -  person Lucas Trzesniewski    schedule 27.09.2014
comment
Обратите внимание, что это рекомендация, а не требование - за исключением того, что такие рекомендации рассматриваются как требования.   -  person user2864740    schedule 27.09.2014
comment
@HansPassant Я пишу API и хочу, чтобы это событие отправляло только Cars. Если бы я хотел, чтобы событие было отправлено чем-либо, я бы использовал объект в качестве отправителя.   -  person noctonura    schedule 27.09.2014
comment
Как вы могли ошибиться? Объект Car запускает событие. Если это пешеход, просто не стреляйте из него. В следующем году вы не знаете, что это может быть что-то еще. Отделить наблюдателя от объекта - действительно большое дело.   -  person Hans Passant    schedule 27.09.2014