Co-variance means that a generic type e.g. an IEnumerable of type string can be used as a generic of any supertype e.g. IEnumerable of type object.
Contra variance means that a generic type e.g. an IEnumerable of type string can be used as a generic of any subtype e.g.IEnumerable of type object.