If B inherits from A, ie is a subtype of A, then C function is covariant if C(B) is a subtype of C(A), contravariant if C(A) is a subtype of C(B).
The question is wether or not you want consumers to deal with supertypes or subtypes.
A common example is a class library dealing in fruit classes.
It is OK for me to give you an apple where you expect a fruit.
It is not OK for me to give you just any fruit where you expect an apple.
If you were making a fruit library. You should be expecting instances fruit from me and I should be expecting instances of fruit from you. Neither of us should have expectations about a subtype that could be false.
Therefore, the answer to the question above depends on wether you're getting or sending. Wether the parameter is read or write.
A fruit list should be accepting bananas or apples, but only send "fruits"