我目前正在阅读C#中的协方差和反变数。
所有示例都包含可转换对象的详细信息,因为接口实现的准确性不同,例如
Circle : IShape
协方差:SomeType<Circle> as SomeType<IShape>
逆变:SomeType<IShape> as SomeType<Circle>
如果TypeA
和TypeB
各自编写implicit converter
以转换为其他类型,但未实现任何通用接口,是否仍然正确在处理这些类型的泛型转换时谈论协方差/逆变?或者这是一个不同的概念?
答案 0 :(得分:2)
不同的概念。 out
意义上的协方差(或通过in
的逆变)始终是参考保留的,根本没有变换 - 只是在其他(可证明的)术语中的相同参考。这也是它不适用于实现接口的结构的原因,因为框不是引用保留的。相同的参考保留逻辑适用于参考类型数组的协变分配。
答案 1 :(得分:1)
这些类型不需要实现通用接口,以便成为共同变体。
这些术语仅指转换是否会导致信息丢失或信息可能增加。当应用于继承对象时,这与应用于双精度和浮点数时一样具有相关性。
所以,是的,只要有一个隐含的转换器,在谈论没有通用接口的对象时,谈论共同/反向差异仍然是正确的。