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

时间:2011-07-19 15:01:40

标签: c# c#-4.0 interface covariance contravariance

我目前正在阅读C#中的协方差和反变数。

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

Circle : IShape

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


如果TypeATypeB各自编写implicit converter以转换为其他类型,但未实现任何通用接口,是否仍然正确在处理这些类型的泛型转换时谈论协方差/逆变?或者这是一个不同的概念?

2 个答案:

答案 0 :(得分:2)

不同的概念。 out意义上的协方差(或通过in的逆变)始终是参考保留的,根本没有变换 - 只是在其他(可证明的)术语中的相同参考。这也是它不适用于实现接口的结构的原因,因为框不是引用保留的。相同的参考保留逻辑适用于参考类型数组的协变分配。

答案 1 :(得分:1)

这些类型不需要实现通用接口,以便成为共同变体。

这些术语仅指转换是否会导致信息丢失或信息可能增加。当应用于继承对象时,这与应用于双精度和浮点数时一样具有相关性。

所以,是的,只要有一个隐含的转换器,在谈论没有通用接口的对象时,谈论共同/反向差异仍然是正确的。