2011-07-19 73 views
7

我目前正在阅读C#中的协变和逆变。协方差/反变换适用于不实现通用接口的隐式可转换类型吗?

所有示例都具有可转换对象的细节,并且因接口实现的准确性而有所不同,例如,

Circle : IShape

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


如果TypeATypeB各有写入转换为其他类型的implicit converter,但没有实现任何共同的接口在处理这些仿制药的转换时,谈论协变性/逆变性仍然是正确的e类型?或者这是一个不同的概念?

回答

2

不同的概念。 out意义上的协变(或者通过in反转)始终是保持参考的,完全没有转换 - 只是其他(可证明的)术语中的相同参考。这也是为什么它不适用于实现接口的结构,因为框不参考保存。相同的参考保持逻辑适用于参考类型数组的协变分配。

+0

是否有这个概念的名称?这是另一种类型的一般差异吗? – StuperUser

1

这些类型不需要实现一个通用接口,以便共同/反对变体。

这些术语只是指转换是否会导致信息丢失或信息可能增加。这与应用于继承对象时相同,因为它应用于双精度和浮点数。

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

相关问题