I hate EventHandler. I hate that I have to cast the sender if I want to do anything with it. I hate that I have to make a new class inheriting from EventArgs to use EventHandler<T>.
I've always been told that EventHandler is the tradition and blah, blah...whatever. But I can't find a reason why this dogma is still around.
Is there a reason why it would be a bad idea to make a new delegate:
delegate void EventHandler<TSender, T>(TSender sender, T args);
That way the sender will be typesafe and I can pass whatever the heck I want as the arguments (including custom EventArgs if I so desire).