+4  A: 

Eric Lippert answers the first part of you question here.

As for the second part of you question, return type covariance has been requested for both C# and VB.NET - however it has not yet been prioritized high-enough relative to other language features to make it into any release. If I remember correctly, this feature would also require changes to the CLR to be implemented appropriately.

As to why this is so, I'll channel Eric Lippert for a moment and respond that not implementing a feature is free, while implementing a features requires the budget and time to design, develop, test, and document it ... which is not free. A feature has to be sufficiently valuable to enough people to justify the expense of creating it.

LBushkin
Thanks, read his post. I am confused as to why the generic parameter can't have any "writeable" fields/properties. Is there an example of how that would cause a problem? Going back to study his example further...
Casey
Couldn't have said it better myself. :-)
Eric Lippert
@Casey: Suppose C<T> is covariant in T and C<T> has a method void M(T t). You have a variable x of type C<object>. You convert a value of type C<Tiger> to C<object> and assign it to x. Now you can call x.M(new Giraffe()) because as far as the compiler knows, M takes an object, not a Tiger. And then the runtime crashes when it tries to convert a giraffe to a tiger. That's why it's illegal for a covariant type to have a T that goes "in".
Eric Lippert