作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在阅读 C# 中的协变和逆变。
所有示例都包含可转换对象的详细信息,并且由于接口(interface)实现的准确性而有所不同,例如
在哪里Circle : IShape
协方差:SomeType<Circle> as SomeType<IShape>
逆变:SomeType<IShape> as SomeType<Circle>
如果TypeA
和 TypeB
每个人都有一个 implicit converter
编写为转换为其他类型,但不实现任何公共(public)接口(interface),在处理这些类型的泛型转换时谈论协变/逆变是否仍然正确?或者这是一个不同的概念?
最佳答案
不同的概念。 out
意义上的协变(或通过 in
实现的逆变)始终保持引用不变,根本没有任何转换 - 只是其他(可证明的)术语中的相同引用。这也是它不适用于实现接口(interface)的结构的原因,因为框不是引用保留的。相同的引用保留逻辑适用于引用类型数组的协变分配。
关于c# - 协变/逆变是否适用于不实现公共(public)接口(interface)的隐式可转换类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749336/
我是一名优秀的程序员,十分优秀!