This is about future validation of your code.
The theory is that if at some point you find that your code needs to publish more data for event handlers than it was before, you can simply add additional properties to the object that you pass to these event handlers.
If for any reason the class containing this data is not under your control, which you inherit from it, and add your properties to the inherited class. So far so good.
But if you never passed an object to an event handler, you cannot add a new parameter to the event delegate without an existing code violation.
As such, that you pass in what the dummy object is, EventArgs.Empty for events now gives you the opportunity to later inherit from EventArgs and start sending data to the same events, without having to change event handlers at all. In most cases, you don’t even have to you need to recompile assemblies that use an event handler.
So, EventArgs is just a convenient class that you pass to event handlers, you can just as easily create your own, but since it does not make sense except to be a place for possible future changes, there is no need to create your own, just use EventArgs .
source share