Почему EventHandlers спроектированы таким образом?
void uxSave_Click(object sender, EventArgs e)
почему бы не это?
void uxSave_Click(Button sender, EventArgs e)
Потому что, используя первый способ, вы также можете присоединить это событие click к панели. Но если это делается во втором случае, если вам нужно контролировать события, делающие то же самое, вам нужно определить два события, не присоединяя их к двум местам.
Кроме того, имейте в виду, что у .NET не было генериков в версии 1.0. В противном случае разумный дизайн мог бы определить обработчик события:
public delegate void EventHandler<TSender, TEventArgs>(TSender sender, TEventArgs e);
public event EventHandler<Control,ClickEventArgs> Click;
Я думаю, это возможно потому, что вы не всегда можете предположить, что ваш отправитель - это тот тип, который вы ожидаете от него. Кто-то еще может вызвать это событие из другого места.