Я понимаю преимущества использования стандартного делегата-делегата обработчика событий MS, поскольку он позволяет вам легко расширять информацию, передаваемую через событие, с нарушением любых старых отношений, основанных на старой сигнатуре делегата.
Что мне интересно на практике, как часто люди следуют этому правилу? Скажем, у меня такое простое событие
public event NameChangedHandler NameChanged;
public delegate void NameChangedHandler(Object sender, string oldName, string newName);
Это простое событие, и я почти уверен, что единственным аргументом, который мне когда-либо понадобится знать из события NameChanged, является объект, имя которого изменено, старое имя и новое имя. Так стоит ли создавать отдельный класс NameChangedEventArgs, или для простых событий, подобных этому, приемлемо ли просто возвращать аргументы напрямую через аргументы делегата?