A lot of the discussion about .NET 4.0 is revolving around the introduction of co-variance and contra-variance for generic types.
It’s important to remember, though, that these concepts aren’t entirely new - there has been some support for variance built into .NET for some time.
For example, consider this snippet of code:
You can see here the
Handler() method being registered for both the
TextBox.KeyPress event and the
event, even though these events have different parameters (
Button.Click expects parameters
What’s going on?
Without specific compiler support, this wouldn’t work. But, variance comes into play. The compiler recognises that the
second parameter of
Handler() is of type
EventArgs - which is sufficiently general to accept any possible value that
might be supplied by the event. Based on this observation, the compiler hooks up the event without complaint.