title: Internal storage mechanism for Events
body: <pre><code>class Control: Component
  {
     // Unique keys for events
     static readonly object mouseDownEventKey = new object();
     static readonly object mouseUpEventKey = new object();
     // Return event handler associated with key
     protected Delegate GetEventHandler(object key) {...}
     // Add event handler associated with key
     protected void AddEventHandler(object key, Delegate handler) {...}
     // Remove event handler associated with key
     protected void RemoveEventHandler(object key, Delegate handler) {...}
     // MouseDown event
     public event MouseEventHandler MouseDown {
        add { AddEventHandler(mouseDownEventKey, value); }
        remove { RemoveEventHandler(mouseDownEventKey, value); }
     }
     // MouseUp event
     public event MouseEventHandler MouseUp {
        add { AddEventHandler(mouseUpEventKey, value); }
        remove { RemoveEventHandler(mouseUpEventKey, value); }
     }
     // Invoke the MouseUp event
     protected void OnMouseUp(MouseEventArgs args) {
        MouseEventHandler handler;
        handler = (MouseEventHandler)GetEventHandler(mouseUpEventKey);
        if (handler != null)
           handler(this, args);
     }
  }
  </code></pre>
  
  <blockquote>
    <p>the Control class implements an internal storage mechanism for events.
    The AddEventHandler method associates a delegate value with a key, the
    GetEventHandler method returns the delegate currently associated with
    a key, and the RemoveEventHandler method removes a delegate as an
    event handler for the specified event. Presumably, the underlying
    storage mechanism is designed such that there is no cost for
    associating a null delegate value with a key, and thus unhandled
    events consume no storage.</p>
  </blockquote>
  
  <p>This code and the explanation in the paragraph above don't make any sense to me. Any idea what this internal storage mechanism is all about? And what does associating a delegate with an abject mean in the paragraph above?</p>