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
The reason is that
IEnumerable<T> was invariant in its type parameter
T. Invariance simply means that no typing relationship between the types
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
By using the
out keyword, ...