Don Box writes more about delegates:
With the first entry he explains the differences of these declarations:
public delegate void EventHandler1<S>(S sender, EventArgs args);
public delegate void EventHandler2<S,E>(S sender, E args) where E: EventArgs;
Of course the second declaration allows using strong types that are derived from EventArgs. The second post explains this issue more detailed. Don gives more information about delegate compatibility: constraints today.