问题标签 [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.
java - 编程语言中的协变和逆变有什么区别?
谁能解释编程语言理论中协变和逆变的概念?
c# - C# 中的继承 - 简单的问题
复制
这是我的代码:
SampleDerived 派生自 SampleBase
根据继承逻辑,我应该可以做到这一点。但是,它不能编译 - 错误表明 SampleBase 不能被隐式转换为 SampleDerived 类型。是什么赋予了?
我正在使用 c# 2.0
c# - c# 2.0(BindingList)中与泛型缺乏协方差的解决方案
这是一个设计问题。我有一个业务对象,以及从它派生的 5 个业务对象类型。
我还将有一个以 BindingList 作为成员的类。我将有 5 个类派生自它。
由于协方差在这里不起作用,您将如何构建设计以最大程度地减少代码重复?我当然可以放弃 BindingList 并使用 DataTable,在这种情况下问题就解决了。
但是由于每个人都对 BindingList 赞不绝口,我很想看看你们会如何处理这个问题。
解决方案(基于 Pavel Minaev 的回答):
java - Java协方差
我很难弄清楚这一点。假设我有以下代码:
为什么赋值会导致编译错误?错误类似于:
根据我对协方差的理解,该getMammals()
方法返回 alist
将始终包含Mammal
对象,因此它应该是可分配的。我错过了什么?
c# - 尽管有通用约束,但 C# 类型转换错误
为什么,对“必须继承自 A”的类 P 的类型参数 T 的通用约束,第一次调用成功但第二次调用失败,注释中详述了类型转换错误:
通用约束不应该确保List<T>
确实如此ICollection<A>
吗?
c# - 对非泛型类型的协方差支持?
我想知道为什么 C# 团队决定不支持非泛型的协变/逆变,考虑到它们可能同样安全。这个问题相当主观,因为我不希望团队成员做出回应,但有人可能拥有我(和 Barbara Liskov)缺乏的洞察力。
让我们看一下这个示例界面:
以下实现将失败,尽管完全安全(我们总是可以在不违反接口的情况下返回更具体的类型 - 不是在 C# 中,但至少在理论上是这样)。
如果接口包含 setter,代码自然不会安全,但这不是限制整体实现的理由,因为可以通过使用 out/in 来声明安全性来指出这一点,就像泛型一样。
c# - IList 在 c# 中使用协变和逆变,这可能吗?
这可能吗?(我没有vs.2010,所以我不能自己尝试,对不起)
如果我做对了,您可以使用它在同一接口中实际实现协变和逆变。
c++ - 有没有办法转发声明协方差?
假设我有这些抽象类Foo
和Bar
:
进一步假设我有派生类ConcreteFoo
和ConcreteBar
. 我想协变地改进foo()
和bar()
方法的返回类型,如下所示:
这不会编译,因为我们心爱的单通道编译器不知道ConcreteBar
它将继承自Bar
,因此这ConcreteBar
是一个完全合法的协变返回类型。简单的前向声明ConcreteBar
也不起作用,因为它不会告诉编译器任何有关继承的信息。
这是我必须忍受的 C++ 的一个缺点,还是实际上有办法解决这个困境?