<p>When should one do the following?</p>

<pre><code>class Foo : Control
{
    protected override void OnClick(EventArgs e)
    {
        // new code here
    }
}
</code></pre>

<p>As opposed to this?</p>

<pre><code>class Foo : Control
{
    public Foo()
    {
        this.Click += new EventHandler(Clicked);
    }

    private void Clicked(object sender, EventArgs e)
    {
        // code
    }
}
</code></pre>

Overriding rather than attaching a delegate will result in more efficient code, so it is generally recommended that you always do this where possible. For more information see
this MSDN article
. Here is a pertinent quote:
The protected OnEventName method also
  allows derived classes to override the
  event without attaching a delegate to
  it. A derived class must always call
  the OnEventName method of the base
  class to ensure that registered
  delegates receive the event.