It's worth noting first that we have to have something like .Invoke()
as the meeting-point between languages. Just as what is int
to C# and Integer
to VB.NET is System.Int32
to both of them, and to any other CLR language; so too we have Invoke()
which any CLR language can offer access to, and which they can then provide additional syntactic sugar in a means suitable for their syntax (most would consider heavily VB style conventions in C# or heavily C# style conventions in VB to be syntactic vinegar; sugar always has to match the rest of the language as best it can).
This sugar added, why not use it all the time? Some people will sometimes want to be clear that they are dealing with a delegate. Some just won't use it; I mostly don't. Like all syntactic sugar, the advantages and disadvantages are matters of clarity rather than correctness (indeed, look at a call to x.Invoke()
in reflector and you'll see that it as x()
because reflector doesn't know which you used).