问题标签 [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.
c# - ref and out parameters in C# and cannot be marked as variant
What does the statement mean?
ref and out parameters in C# and cannot be marked as variant.
1) Does it mean that the following can not be done.
2) Or does it mean I cannot have the following.
I tried (2) and it worked.
c# - 为什么我不能从列表转换列出即使IScreen实现了IRenderable?
非常不言自明的问题,很高兴得到任何答案。对我来说这没有意义。我不在乎丢失信息。我只想以某种方式将所有继承 IRenderable 的列表连接到一个列表中,然后在其上调用 IRenderable 方法。我有一种感觉,这是我忘记的一些基本编程规则......
编辑:这是代码:
edit2:顺便说一句,我安装了 .net 4.0,但参考仍然是 System.dll 版本 2.0.5.0
c# - 有没有办法在 C# 4.0 中确定接口/委托的方差?
所以现在我们在 C# 中的接口和委托上有了通用协变和逆变,我只是好奇如果给定一个Type
,你可以找出它的通用参数的协变/逆变。我开始尝试编写自己的实现,它会查看给定类型的所有方法,并查看返回类型和/或参数是否与泛型参数中的类型匹配。问题是,即使我有这个:
使用我的逻辑,它看起来应该是逆变的,但由于我们实际上没有指定:
(in 参数)它实际上不是逆变的。这引出了我的问题:有没有办法确定泛型参数的方差?
.net - 为什么 .NET 4 中的类不是协变的?
可能重复:
为什么 C# 4.0 中的类没有通用差异?
作为一名新手程序员,我有几个关于 .NET 4 的变化的问题。与其说是它是如何工作的,不如说是为什么某些东西没有变化,以及其他人是否会觉得这很有用。
问题一:
我知道接口和委托在 .NET 4 中可以是协变/逆变的,但为什么不是类呢?所以,问题1:
这在某种程度上不安全吗?这不会有用吗?
问题2:
问题 2 源自问题 1,但可能更多地处理签名而不是方差。假设我有一个带有 MustOverride 成员的 MustInherit 类:
在派生类中,为什么不能重写 SomeClass 并返回一个 Derived Class Of BaseClass?这不安全吗?仅仅是签名不检查继承关系吗?
任何关于为什么在 .NET 4 中不允许这样做的见解将不胜感激。
c# - 逆变委托值类型
谁能阐明为什么逆变不适用于 C# 值类型?
以下不起作用
covariance - could someone explain the connection between type covariance/contravariance and category theory?
I am just starting to read about category theory, and would very much appreciate it if someone could explain the connection between CS contravariance/covariance and category theory. What would some example categories be (i.e. what are their objects/morphisms?)? Thanks in advance?
c# - IEnumerable 是如何实现的反变体?
这篇文章(http://blogs.msdn.com/b/brada/archive/2005/01/18/355755.aspx)说IEnumerable<T>
是反变体。然而类型 T 是协变的,因为它是一个out
参数。那么在什么情况下是IEnumerable<T>
反变体?
希望我没有混淆!感谢您提前回答!
.net - 反方差和协方差 - 通过 C# 的 CLR
在 CLR via c# 第三版中,有一个我似乎无法理解的示例:
不变意味着不能更改该泛型类型参数。到目前为止,我在本章中只展示了不变的泛型类型参数。n
逆变意味着泛型类型参数可以从一个类更改为从它派生的类。在 C# 中,您使用in 关键字指示逆变泛型类型参数。
逆变泛型类型参数只能出现在输入位置,例如方法的参数。n 协变意味着泛型类型参数可以从一个类更改为其基类之一。在 C# 中,您使用out 关键字指示协变泛型类型参数。协变泛型类型参数只能出现在输出位置,例如方法的返回类型。
然后作者继续举这个例子:
这里,泛型类型参数 T 用 in 关键字标记,使其具有逆变性;并且泛型类型参数 TResult 用 out 关键字标记,使其成为协变的
这是我在下一页(292)上遇到问题的地方,然后他在使用界面时说相反。
当使用接受泛型参数和返回值的委托时,建议始终为逆变和协变指定 in 和 out 关键字,因为这样做不会产生不良影响,并使您的委托可以在更多场景中使用。与委托一样,具有泛型类型参数的接口可以使其类型参数是逆变的或协变的。下面是一个带有逆变 >generic 类型参数的接口示例:
由于 T 是逆变的,因此可以使以下代码编译并成功运行:
在第二个示例中,他使用了 out 关键字 ( IEnumerator<out T>
),然后将其称为逆变。这是正确的还是我错过了什么。在接口中定义逆变和协变是否有区别?关于这本书,我去过 Oreilly 的网站,但没有列出。
c# - 逆变器不起作用
到目前为止一切都很好,但是为什么这会产生空值?
myControl 现在为空...
scala - Scala:使用函数作为第一类对象的问题
我需要一个通用函数的集合,但我无法以我喜欢的方式完成它。我创建了一个
但是一旦我尝试插入一个函数,例如
我得到一个错误。我如何声明一个不考虑参数和返回值类型的通用函数集合?