Stu*_*ser 7 c# interface covariance contravariance c#-4.0
我目前正在阅读C#中的协方差和逆变.
所有示例都包含可转换对象的详细信息,因为Interface实现的准确性不同,例如
哪里 Circle : IShape
协方差:SomeType<Circle> as SomeType<IShape>
逆变:SomeType<IShape> as SomeType<Circle>
如果TypeA和TypeB每个都有一个implicit converter写入转换为另一种类型但没有实现任何通用接口,那么在处理这些类型的泛型转换时谈论协方差/逆变是否仍然正确?或者这是一个不同的概念?
不同的概念。某种意义上的协变out(或通过 的逆变in)始终是引用保留的,根本没有任何变换 - 只是在其他(可证明的)术语中具有相同的引用。这也是为什么它不适用于实现接口的结构,因为盒子不保留引用。相同的引用保留逻辑适用于引用类型数组的协变赋值。