问题标签 [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.
generics - 有没有办法在 C# 3.0 中实现泛型类型的协变?
这已在 C# 4.0 中引入,但有没有办法在 c# 3.0 中实现这一点?
例如,考虑以下代码:
现在,我想要一个 的列表User<T>
,我可以在其中存储User<Derived1>
以及User<Derived2>
,但以下代码无法在 C# 3.0 中编译:
有任何想法吗?
c# - 如何部分指定泛型方法类型参数
我有一个如下的扩展方法:
目前,我可以通过以下方式使用它:
它工作得很好,但是第二个类型参数真的很烦人。是否有可能在 C# 4.0 中重写 GetValueAs 是这样一种方式,该方法仍然适用于不同类型的字符串键字典,并且不需要在调用代码中指定第二个类型参数,即使用
者至少像替p>java - java泛型协方差
我无法理解以下文章: http ://www.ibm.com/developerworks/java/library/j-jtp01255.html
在下面,
泛型不是协变的
作者说,
因为 ln 是一个 List,向它添加一个 Float 似乎是完全合法的。但是如果 ln 用 li 作为别名,那么它会破坏 li 定义中隐含的类型安全承诺——它是一个整数列表,这就是泛型类型不能协变的原因。
我无法理解它说“如果 ln 与 li 别名”的部分。作者所说的别名是什么意思?(参考?)。引用行上方的代码片段似乎说明了 java 中什么是非法的,而不是为什么。如果有人可以举例说明,那对我很有帮助。提前致谢。
c# - 协方差和逆变现实世界的例子
我很难理解如何在现实世界中使用协变和逆变。
到目前为止,我看到的唯一示例是相同的旧数组示例。
如果我能看到它在其他地方使用,那么很高兴看到一个允许我在开发过程中使用它的示例。
c# - 铸造泛型和泛型类型
考虑一下,我有以下 3 个类/接口:
我希望能够将 aMyClass<Derived>
转换为 aMyClass<IMyInterface>
或反之亦然:
但是如果我尝试,我会得到编译器错误:
我确信我不能这样做有一个很好的理由,但我想不出一个。
至于我为什么要这样做 - 我想象的场景是您理想情况下希望使用的实例MyClass<Derived>
以避免大量讨厌的强制转换,但是您需要将实例传递给接受MyClass<IMyInterface>
.
所以我的问题是双重的:
- 为什么我不能在这两种类型之间进行转换?
- 有什么方法可以保持使用实例的好处,
MyClass<Derived>
同时仍然能够将其转换为MyClass<IMyInterface>
?
c# - C# 4 的协方差是否支持泛型嵌套?
我不明白为什么下面的“x”会转换,但“y”和“z”不会。
新的协方差特性是否根本不适用于泛型的泛型,或者我做错了什么?(我想避免使用 .Cast<> 来使 y 和 z 工作。)
c++ - 返回 shared_ptr 时如何实现协变返回类型?
返回类型不是协变的(因此它们也不是合法的),但如果我使用原始指针,它们会是。解决这个问题的普遍接受的习语是什么,如果有的话?
scala - 在 Scala 中使用子类型和返回类型将通用对象处理为特定对象
我认为这是关于协方差,但我在这个话题上很弱......
我有一个通用的 Event 类,用于数据库持久性之类的事情,让我们这样说:
但是,我有很多不同的事件动词,我想对这些不同的事件类型使用模式匹配等,所以我将创建一些相应的案例类:
现在,问题是,我怎样才能轻松地将通用事件转换为特定的案例类。
这是我的第一次尝试:
不幸的是,这是错误的。
比我有更大类型fu的人可以解释一下,1)如果我想做的事情是可能的(或合理的,就此而言),以及2)如果是这样,如何解决event2CC
。谢谢!
c# - 了解 C# 中的协变和逆变接口
我在我正在阅读的 C# 教科书中遇到了这些,但我很难理解它们,可能是由于缺乏上下文。
对它们是什么以及它们有什么用处有一个很好的简明解释吗?
编辑澄清:
协变接口:
逆变接口: