I'm currently reading up on Covariance and Contravariance in C#.
All examples have details of objects being convertable and differ because of the accuracy from the Interface implementation e.g.
Where Circle : IShape
Covariance: SomeType<Circle> as SomeType<IShape>
Contravariance: SomeType<IShape> as SomeType<Circle>
If TypeA
and TypeB
each have an implicit converter
written to convert to the other type, but do not implement any common Interface, is it still correct to talk about covariance/contravariance when dealing with conversion of generics of these types? Or is this a different concept?