Основным преимуществом подписи EventHandler<T>
по сравнению с использованием одного параметра для каждого члена вашего EventArgs
является то, что вы можете добавить дополнительные свойства к вашему EventArgs
без нарушения совместимости.
ИМО это самый важный аргумент. Возможность расширить свой EventArgs
без нарушения кода подписки - это очень приятно. Но, конечно, вы можете добиться того же с любой сигнатурой, которая использует некоторый параметр свойства-пакета вместо параметра для свойства.
Тогда есть дисперсия, EventHandler<Base>
преобразуется в EventHander<Derived>
, поэтому вы можете написать EventHandler с параметром EventArgs
и подписаться на события, которые имеют более конкретный EventArgs
.
Методы расширения - еще один плюс, но вы уже упоминали об этом.