问题标签 [covariance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 为什么我们需要 C# 中协变和逆变的新关键字?
有人可以解释为什么需要添加 out 或 in 参数来指示泛型类型是 C# 4.0 中的 Co 或 Contra 变体吗?
我一直在试图理解为什么这很重要以及为什么编译器不能弄清楚..
谢谢,
乔什
class - 关于类继承的协变与逆变
“协变”和“逆变”这两个概念的含义是什么?
给定 2 个类Animal和Elephant(从Animal继承),我的理解是,如果您尝试将 Elephant 放入 Animals 数组中,您会遇到运行时错误,这是因为 Elephant 是“更大”(更多具体)比动物。但是,您能否将 Animal 放入 Elephant 数组中,看看 Elephant 是如何保证包含 Animal 属性的?
c# - 泛型类中的 C#-数组协方差
我知道 C# 支持这样的数组中的协方差:
但是当它尝试编译以下代码时出现错误
它说“无法将类型'T[]'隐式转换为'K[]'”
为什么我收到这个错误???
c# - 在 C# 4.0 中,为什么方法中的 out 参数不能是协变的?
鉴于这个神奇的界面:
而这个类层次结构:
我现在可以编译这个:
这是伟大的。但是如果我以不同的方式定义接口怎么办:
我表示帽子可能是空的,使用单独的布尔返回值(以前的版本可能会从空帽子返回空兔子)。但我仍然只输出一只兔子,所以没有做任何与以前版本在逻辑上不同的事情。
CTP 中的 C# 4.0 编译器在接口定义中给出错误 - 它要求“out”方法参数为不变类型。是否有一个明确的理由为什么不允许这样做,或者它可能会在未来的版本中解决?