I dont believe you can overload those operators on a delegate since it's considered a primitive (such as int and byte etc). the only way you might can do it is if the return type of delegate overloads it. e.g:
1
| delegate Something Foo(String s); |
if the Something class overloads the += operator, that might be enough to do it. *shrug* I will look into it. sort of pointless in this topic since Java offers no operator overloading

I would suppose the delegates use a list of some sort since you can add/remove methods to one delegate. By the way, you can add any method to a delegate provided the method shares the same signature as the delegate (e.g. returntype and parameters).
Events in C# seem to be just specialized delegates. But with further experience I may prove myself wrong
edit:one advantage event-wise in C# is that 99% of the time you dont even have to worry about event listeners (er, well, "callbacks" would be a more precise term). For example, the System.Windows.Forms class pre-defines every method for every event that could possibly happen to that window. there's no need to add any listeners, just override an event method that you need to use
