Q: Why don't control events fire on base interface? This one is weird.  I've got a UITextView control called txtNotes, and I want to consume Scrolled events, so I do this:
txtNotes.Scrolled += (object sender, EventArgs e) => 
{
    "Scrolled".Debug();
};

And this works fine; the debug message prints as expected.  But I have a helper function that does something to UIScrollView, which UITextView inherits from.  So I'm doing the equivalent of this:
UIScrollView uv = txtNotes;

uv.Scrolled += (object sender, EventArgs e) => 
{
    "Scrolled".Debug();
};

And this DOES NOT WORK: the event handler is never called.  And elsewhere I have a control of type UIScrollView (NOT a type that inherits from UIScrollView), and I CAN get events from it.  So it seems like base class events don't fire on subclasses when they are typed as the base class.
This doesn't make any sense to me, and really feels like a bug in Monotouch or maybe the underlying iOS.  Can anyone confirm this, or tell me what I'm doing wrong, and how to fix/work around it?

A: The short answer is that UITextView provides:
public new event EventHandler Scrolled

the new keyword hides the base UIScrollView.Scrolled event - making them two separate implementations. IOW if you set one then the other is not set. That's how .NET works.
But why is there a new ? The reasons are a bit complex. Providing strongly typed events is only possible by creating an internal *Delegate type as glue code. That works well for 99% of the time but has a few drawbacks. 
In this case the internal *Delegate type won't be identical if a UIScrollView or an UITextView is used - and inheritance could not be used (and the reason for it escapes my mind tonight :-).
However I'm surprised that using [Weak]Delegate properties did not work. I see why, it's the same new, but I can't recall a reason for this one... Need to investigate :)
