Delegate invocations

For a delegate invocation, the primary-expression of the invocation-expression must be a value of a delegate-type. Furthermore, considering the delegate-type to be a function member with the same parameter list as the delegate-type, the delegate-type must be applicable (14.4.2.1) with respect to the argument-list of the invocation-expression.
The run-time processing of a delegate invocation of the form D(A), where D is a primary-expression of a delegate-type and A is an optional argument-list, consists of the following steps: D is evaluated. If this evaluation causes an exception, no further steps are executed. The value of D is checked to be valid. If the value of D is null, a System.NullReferenceException is thrown and no further steps are executed. Otherwise, D is a reference to a delegate instance. A function member invocation (14.4.3) is performed on the method referenced by the delegate. If the method is an instance method, the instance of the invocation becomes the instance referenced by the delegate.