协方差/逆变是否适用于不实现公共接口的隐式可转换类型?

Stu*_*ser 7 c# interface covariance contravariance c#-4.0

我目前正在阅读C#中的协方差和逆变.

所有示例都包含可转换对象的详细信息,因为Interface实现的准确性不同,例如

哪里 Circle : IShape

协方差:SomeType<Circle> as SomeType<IShape>
逆变:SomeType<IShape> as SomeType<Circle>


如果TypeATypeB每个都有一个implicit converter写入转换为另一种类型但没有实现任何通用接口,那么在处理这些类型的泛型转换时谈论协方差/逆变是否仍然正确?或者这是一个不同的概念?

Mar*_*ell 2

不同的概念。某种意义上的协变out(或通过 的逆变in)始终是引用保留的,根本没有任何变换 - 只是在其他(可证明的)术语中具有相同的引用。这也是为什么它不适用于实现接口的结构,因为盒子不保留引用。相同的引用保留逻辑适用于引用类型数组的协变赋值。