7

我目前正在阅读 C# 中的协变和逆变。

所有示例都有可转换对象的详细信息,并且由于接口实现的准确性而有所不同,例如

在哪里Circle : IShape

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


如果每个人都有一个TypeA转换为另一种类型的书面文件,但没有实现任何通用接口,那么在处理这些类型的泛型转换时谈论协变/逆变是否仍然正确?或者这是一个不同的概念?TypeBimplicit converter

4

2 回答 2

2

不同的概念。某种意义上的协变out(或通过 的逆变in)始终是保持引用的,根本没有任何转换——在其他(可证明的)术语中只是相同的引用。这也是为什么它不适用于实现接口的结构的原因,因为框不保留引用。相同的引用保留逻辑适用于引用类型数组的协变赋值。

于 2011-07-19T15:07:50.170 回答
1

这些类型不需要实现一个通用接口来实现协变/反变。

这些术语仅指转换是否会导致信息丢失或信息的潜在增加。这在应用于继承对象时与应用于双精度和浮点数时一样重要。

所以是的,只要有一个隐式转换器,在谈论没有公共接口的对象时谈论协方差仍然是正确的。

于 2011-07-19T15:07:57.240 回答