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 Button.Click
event, even though these events have different parameters (Button.Click
expects parameters object
and EventArgs
while TextBox.KeyPress
expects object
and KeyPressEventArgs
).
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.
Comments
blog comments powered by Disqus