Nice stuff, thanks for sharing. Smiley

Note that for events handlers there is a trick to avoid checking for null:

public event EventHandler Updated = delegate{};

public void Update()
    Updated(this, EventArgs.Empty);

So from the start you have at least one empty delegate to execute, and a priori even a malicious code can't remove the original empty delegate so you always have one.

You can consider this an application of the "null object" pattern.