协方差/逆变是否适用于不实现公共接口的隐式可转换类型?
本文关键字:接口 类型 可转换 实现 方差 是否 适用于 | 更新日期: 2023-09-27 18:02:26
我正在学习c#中的协方差和逆变。
所有示例都有对象可转换的细节,并且由于与接口实现的准确性而有所不同,例如
其中Circle : IShape
SomeType<Circle> as SomeType<IShape>
逆变:
SomeType<IShape> as SomeType<Circle>
如果TypeA
和TypeB
都有一个implicit converter
来转换为另一种类型,但是不实现任何公共接口,在处理这些类型的泛型转换时,谈论协方差/逆变是否仍然正确?或者这是一个不同的概念?
不同的概念。out
意义上的协方差(或in
意义上的逆变方差)总是保持引用的,根本没有变换——只是其他(可证明的)项中的相同引用。这也是为什么它不适用于实现接口的结构,因为框不是引用保存的。同样的保引用逻辑也适用于引用类型数组的协变赋值。
这些类型不需要实现一个公共接口来实现共变/反变。
这些术语只是指转换是否会导致信息的丢失或信息的潜在增加。
所以,是的,当谈论没有公共接口的对象时,只要有隐式转换器,谈论co/contro -variance仍然是正确的。