Events in C# always feel like there is a little touch of black magic in the background keeping things running smoothly. We have had tutorials here before on events in C# - we took a look at how to create your own custom events in C# Snippet Tutorial - Custom EventHandlers , and we looked at the syntactic sugar behind the += and -= operators for events in C# Tutorial - EventAccessors . But we have never taken a look at what actually happens when you declare an event, and what happens when you invoke it. The key behind events in C# in the MulticastDelegate . You've probably seen delegates before (if you haven't, they are just a reference to a method), and knowing that, you can probably wager a guess as to what a MulticastDelegate is. A MulticastDelegate is essentially a list of method references that acts like a regular old delegate in many ways. For instance, take a look at the following: private void DoIt () { var del = new Action ( Method1 ); del ()...