So far, it's pretty simple:
context.BeginRequest
is the event instance. This is the class which has
invocation list. The '+=' operation adds the handler (actually, a delegate instance), this that invocation list. In your case, the handler is
context_BeginRequest
. Interestingly, event instances are
immutable, so, in fact, '+=' operator creates a brand new instance of the event instance and adds all handlers already found in the invocation list before the operation, adds a new handler are returns that new event instance. This way, the member
context.BeginRequestNaturally
, which is the reference object, looses its
referential identity. Eventually, old event instance object, as it becomes inaccessible, will be garbage-collected. This is done to improve multithreading properties of event instances.
You can read about it, as well as some other interesting facts, in my article, the section
4.1 On the Nature of Delegate Instance.
Now, as right part is just the method, you can call it method the same way as any other method. The object on left is the event instance. For event instances, there is no such concept as "call". It can be invoked, so all elements of the invocation list will be called. That's why there is no a "call". Moreover, the invocation (
BeginRequest.Invoke(/*...*/
) cannot be done anywhere except the declared type. If the source code of this type is yours, you can invoke the event. This is the important fool-proof feature of .NET, to guard naive developers from invoking an event instance when it is not needed. You can read about it in my past answer:
UserControl custom event[
^].
—SA