Covariance Example – In progress – Not finished

This blog is about the issues with covariance. Your question should be:

  1. Why should I care?
  2. What are the limitations?
  3. What is it?
  4. Who needs it?
  5. How is it supported today?
  6. How will it be supported in C# 4.0?


To answer these questions we need a solid and compilable example. A lot of the blogs that I read did not give concrete examples and how c# 4.0 might fix them.


Here is what does work right now with C# 3.0



Humans want what they can't have


Looking at the code below we notie that the "Clone()" method can return an "object" instead of a "Car" object.







This is not going to work.


Wouldn't it be nice to have a method public Mammal Clone() instead? It would give type-safety to all callers of the method.


But that's a feature, which is currently not implemented in the C# language.


The more general return type in the interface or a base class can not be narrowed on implementing or deriving classes.


The same problem arises in a number of cases and on generics, as we will see later on.



Skip to main content