A nice series of posts about Covariance and Contravariance in a hypothetical future version of C# by Eric Lippert.
Eric added another part: