When you create a delegate, the compiler at compile time generates a class inheriting from MulticastDelegate
, adding three methods to the class: BeginInvoke
, EndInvoke
and Invoke
. You can easily see it using using ILSpy and the likes.
That is why you cant see it while looking in the Delegate
class
This is what MSDN has to say:
MulticastDelegate is a special class. Compilers and other tools can derive from this class, but you cannot derive from it explicitly. The same is true of the Delegate class.
In addition to the methods that delegate types inherit from MulticastDelegate, the common language runtime provides two special methods: BeginInvoke and EndInvoke.
A MulticastDelegate has a linked list of delegates, called an invocation list, consisting of one or more elements. When a multicast delegate is invoked, the delegates in the invocation list are called synchronously in the order in which they appear. If an error occurs during execution of the list then an exception is thrown