MulticastDelegate, and the CLR implements all of the interesting methods of the delegate dynami-
cally at run time. That’s why you won’t see any IL code behind those delegate methods if you
examine the compiled module with ILDASM.
The delegate contains a couple of useful fields. The first one holds a reference to an object, and
the second holds a method pointer. When you invoke the delegate, the instance method is called on
the contained reference. However, if the object reference is null, the runtime understands this to
mean that the method is a static method. One delegate type can handle callbacks to either an
instance or a static method. Moreover, invoking a delegate syntactically is the exact same as calling
a regular function. Therefore, delegates ...