Co- and contravariance is not about the types you pass into the methods. It is about the generic interfaces that contain the methods.
With in
the following code is legal:
IComparable<Person> foo = ...;
IComparable<Programmer> bar = foo;
Without the in
it would be illegal.