问题标签 [contravariance]

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.

0 投票
3 回答
303 浏览

c# - 为什么不允许在不同类型参数之间进行转换?

我只是不明白,因为将一个通用容器转换为另一个容器会非常有用吗?

0 投票
4 回答
2301 浏览

c# - 协变和逆变有什么好处?

C# 4.0 将支持协变和逆变。但我并不清楚这个新功能的好处。你能解释一下(清楚地)我们为什么需要它吗?

0 投票
2 回答
1120 浏览

c# - 如何创建具有继承的泛型类?

如何使以下代码工作?我认为我不太了解 C# 泛型。也许,有人可以指出我正确的方向。

这可能是一个简单的答案。

更新:首先,这在 C# 3.0 中是不可能的,但在 C# 4.0 中是可能的。

要让它在 C# 3.0 中运行,这只是 4.0 之前的一种解决方法,请使用以下命令:

0 投票
3 回答
550 浏览

.net - .NET Framework 4.0 中的类型差异

IEnumerable<T>IComparable<T>还有一些现在是类型变体的。IList<T>ICollection<T>而许多其他人不是。为什么?

0 投票
5 回答
7023 浏览

c# - C#:方差(协方差/逆变)是多态性的另一个词吗?

我试图从网上的几篇文章和 StackOverflow 上的问题中弄清楚这些词的确切含义,据CovarianceContravariance所知,这只是polymorphism 的另一个词

我对上述说法是否正确?还是我弄错了?

0 投票
4 回答
10065 浏览

java - 编程语言中的协变和逆变有什么区别?

谁能解释编程语言理论中协变和逆变的概念?

0 投票
3 回答
557 浏览

c# - 对非泛型类型的协方差支持?

我想知道为什么 C# 团队决定不支持非泛型的协变/逆变,考虑到它们可能同样安全。这个问题相当主观,因为我不希望团队成员做出回应,但有人可能拥有我(和 Barbara Liskov)缺乏的洞察力。

让我们看一下这个示例界面:

以下实现将失败,尽管完全安全(我们总是可以在不违反接口的情况下返回更具体的类型 - 不是在 C# 中,但至少在理论上是这样)。

如果接口包含 setter,代码自然不会安全,但这不是限制整体实现的理由,因为可以通过使用 out/in 来声明安全性来指出这一点,就像泛型一样。

0 投票
3 回答
1977 浏览

c# - IList 在 c# 中使用协变和逆变,这可能吗?

这可能吗?(我没有vs.2010,所以我不能自己尝试,对不起)

如果我做对了,您可以使用它在同一接口中实际实现协变和逆变。

0 投票
3 回答
420 浏览

c# - 为什么 ref 参数不是逆变的?

这有效:

但这不会:

(注意端点的类型)

这似乎很奇怪。为什么 ref 关键字会破坏参数的逆变性?

0 投票
4 回答
904 浏览

c# - 如何声明一个返回“任何东西”的通用集合的方法(C#)

我正在使用从抽象基类派生的通用集合类的层次结构来存储也从抽象基类派生的实体项:

此模型的目标是对从 CollectionBase<T> 派生的任何类的成员强制执行严格的类型规则,并保证这些成员具有默认的公共构造函数。到目前为止它有效。

现在我想创建一个工厂方法,它返回从 CollectionBase<T> 派生的类的实例。我知道通常的方法是:

... 或许 ...

但是,问题是调用例程不知道需要什么“T”。工厂方法本身必须确定要返回的特定集合类型。所以我需要一个非泛型方法签名,上面写着“返回类型将派生自 CollectionBase<T>”。我设想这样的事情(如果它是合法的)......

我认为这是另一个棘手的通用方差问题,但即使在阅读了 Eric Lippert 对该主题的广泛解释之后,我仍然不清楚我正在尝试做的事情在 C# 4.0 中是否可行,以及是否有一个简单的C# 3.0 中的解决方法。

提前感谢您的想法。