Questions tagged «contravariance»

4
为什么协方差和逆方差不支持值类型
IEnumerable<T>是协变的,但它不支持值类型,仅支持引用类型。下面的简单代码已成功编译: IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; 但是从更改string为int会得到编译错误: IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; 原因在MSDN中进行了解释: 方差仅适用于引用类型;如果为变量类型参数指定值类型,则该类型参数对于生成的构造类型而言是不变的。 我搜索后发现,提到的一些问题的原因是值类型和引用类型之间的装箱。但这仍不能使我清楚为何拳击是原因? 有人可以给出一个简单而详细的解释,为什么协变量和协变量不支持值类型,以及装箱如何影响值类型?


4
该示例为何不编译,又是(协方,对方和内部)方差如何工作?
接着这个问题,有人可以在Scala中解释以下内容: class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } 我明白之间的区别+T,并T在类型声明(它编译如果我使用T)。但随后一个人如何真正写一个类,这是在其类型参数的协变而不诉诸创造的东西unparametrized?如何确保只能使用实例创建以下内容T? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } 编辑 -现在将其归结为以下内容: abstract class _Slot[+T, V <: T] (var some: V) { def getT() = { some } } …

2
问题理解C#中与泛型的协方差
我不明白为什么下面的C#代码无法编译。 如您所见,我有一个带有IEnumerable<T>参数的静态泛型方法Something (并且T被限制为IA接口),并且该参数不能隐式转换为IEnumerable<IA>。 有什么解释?(我不是在寻找解决方法,只是为了了解为什么它不起作用)。 public interface IA { } public interface IB : IA { } public class CIA : IA { } public class CIAD : CIA { } public class CIB : IB { } public class CIBD : CIB { } public static class Test { public …

3
用简单的英语解释协方差,不变性和相反性?
今天,我读了一些有关Java中协方差,协方差(和不变性)的文章。我阅读了英文和德文的Wikipedia文章,以及其他来自IBM的博客文章和文章。 但是我仍然对这些到底是什么感到困惑?有人说这与类型和子类型之间的关系有关,有人说与类型转换有关,有人说它用于确定方法是被重写还是被重载。 因此,我正在寻找一个简单的英语解释,它向初学者展示了协方差和逆方差(以及不变性)。加号是一个简单的例子。

2
在C#4.0中如何实现通用协方差和反方差?
我没有参加PDC 2008,但是我听到一些消息,宣布C#4.0支持通用协方差和反方差。即List<string>可以分配给List<object>。怎么可能 在乔恩·斯基特(Jon Skeet)的《C#in Depth》一书中,解释了为什么C#泛型不支持协方差和逆方差。它主要用于编写安全代码。现在,C#4.0更改为支持它们。会带来混乱吗? 有人知道有关C#4.0的详细信息可以给出一些解释吗?


2
了解C#中的协变和逆变接口
我在使用C#阅读的教科书中遇到了这些问题,但是由于缺乏上下文,我很难理解它们。 关于它们是什么以及对它们有用的内容,是否有一个很好的简洁解释? 编辑以澄清: 协变介面: interface IBibble<out T> . . 换向接口: interface IBibble<in T> . .
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.