In this particular case, you could, with a reflection. However, in general, you cannot. Events encapsulate the idea of subscribing subscribers and unsubscribing - and that’s all. The subscriber is not intended to find out what other subscribers have.
The field event, as you just showed, is simply backed up by a field of the corresponding delegate type, with auto-generated add / remove handlers that simply use this field. However, there is nothing to say that they should be implemented like this. For example, an event can store its subscribers in an EventHandlerList , which is effective if you have several events in the class and only a few of them are likely to be signed.
Now I assume that you can try to find the body of the "add" handler, decompile it and find out how the event handlers are stored, and get them that way ... but please do not do this. You create a lot of work just to break the encapsulation. Just rework your code so you don't have to do this.
EDIT: I assume that you are talking about getting subscribers from a class declaring an event. If you are inside a class that declares an event, then this is easy because you know how this event is stored.
At this point, the problem is with the “recruiting event subscribers” to “receive the individual delegates that make up the multicast delegate,” and that's easy. As others have said, you can call Delegate.GetInvocationList to get an array of delegates ... and then use Delegate.Method to get the method this particular delegate is targeting.
Now let's look at your subscription code again:
public void Go() { Load += (x) => { }; }
The method that is used to create the delegate here is not Go ... it is a method created by the C # compiler. It will have an “inexpressible name” (usually with angle brackets), so it will look something like this:
[CompilerGenerated] private static void <Go>b__0(int x) { }
Now, is that what you want to get? Or did you really want to find out which method performed the subscription, and not which method was used as a signed handler?