Generic Co- and Contravariance
Let’s take a closer look at co- and contravariance on generic interface types. At the start of this chapter, you saw how the next piece of code didn’t compile in .NET 3.5, with the assumption that MakeJuice
takes in an IEnumerable<Fruit>
:
The reason is that IEnumerable<T>
was invariant in its type parameter T
. Invariance simply means that no typing relationship between the types IEnumerable<Base>
and IEnumerable<Derived>
is established. They’re treated as unrelated to one another.
In .NET 4, IEnumerable<T>
has been marked as covariant by putting the out
keyword on the type parameter T
:
By using the out
keyword, ...
Get C# 4.0 Unleashed now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.