Why would I define a .NET class with events instead of simply using delegates?
Encapsulation is the reason to use events rather than only delegates in .NET applications. Because the only delegate functionality exposed to other classes is adding and removing delegates to the invocation list, the user of an event cannot reassign the delegate field to another instance and thereby disconnect any other event handlers hooked up to the delegate.