问题标签 [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.

0 投票
2 回答
589 浏览

generics - 有没有办法在 C# 3.0 中实现泛型类型的协变?

这已在 C# 4.0 中引入,但有没有办法在 c# 3.0 中实现这一点?

例如,考虑以下代码:

现在,我想要一个 的列表User<T>,我可以在其中存储User<Derived1>以及User<Derived2>,但以下代码无法在 C# 3.0 中编译:

有任何想法吗?

0 投票
4 回答
2590 浏览

c# - 如何部分指定泛型方法类型参数

我有一个如下的扩展方法:

目前,我可以通过以下方式使用它:

它工作得很好,但是第二个类型参数真的很烦人。是否有可能在 C# 4.0 中重写 GetValueAs 是这样一种方式,该方法仍然适用于不同类型的字符串键字典,并且不需要在调用代码中指定第二个类型参数,即使用

者至少像替p>

0 投票
4 回答
1128 浏览

c# - C# 强制转换 Foo给富

does anyone know if it is possible to cast a generic type with a certain type parameter (e.g. Bar) to the same generic type with the type parameter being a base type of Bar (such as object in my case). And, if

does anyone know if it is possible to cast a generic type with a certain type parameter (e.g. Bar) to the same generic type with the type parameter being a base type of Bar (such as object in my case). And, if it is possible, how would it be done?

What I want to do is have a collection of Foo<object> but be able to add Foos with more specific type arguments.

Thanks


Can I make a symfony sfValidatorFile required ONLY if the action is 'new'?

I have an admin form that lets users create entities that require an image. So in the form class, I have a sfValidatorFile object that sets the 'required' option to true. This is perfect behavior when the user creates a new entity. The problem arises when they edit an existing entity. They shouldn't have to select an image every time they edit the entity, but if they don't, symfony returns an error complaining that the image is required. So is it possible to make sfValidatorFile use the 'required' option conditionally?

0 投票
3 回答
12906 浏览

java - java泛型协方差

我无法理解以下文章: http ://www.ibm.com/developerworks/java/library/j-jtp01255.html

在下面,

泛型不是协变的

作者说,

因为 ln 是一个 List,向它添加一个 Float 似乎是完全合法的。但是如果 ln 用 li 作为别名,那么它会破坏 li 定义中隐含的类型安全承诺——它是一个整数列表,这就是泛型类型不能协变的原因。

我无法理解它说“如果 ln 与 li 别名”的部分。作者所说的别名是什么意思?(参考?)。引用行上方的代码片段似乎说明了 java 中什么是非法的,而不是为什么。如果有人可以举例说明,那对我很有帮助。提前致谢。

0 投票
9 回答
74932 浏览

c# - 协方差和逆变现实世界的例子

我很难理解如何在现实世界中使用协变和逆变。

到目前为止,我看到的唯一示例是相同的旧数组示例。

如果我能看到它在其他地方使用,那么很高兴看到一个允许我在开发过程中使用它的示例。

0 投票
2 回答
544 浏览

c# - 铸造泛型和泛型类型

考虑一下,我有以下 3 个类/接口:

我希望能够将 aMyClass<Derived>转换为 aMyClass<IMyInterface>或反之亦然:

但是如果我尝试,我会得到编译器错误:

我确信我不能这样做有一个很好的理由,但我想不出一个。

至于我为什么要这样做 - 我想象的场景是您理想情况下希望使用的实例MyClass<Derived>以避免大量讨厌的强制转换,但是您需要将实例传递给接受MyClass<IMyInterface>.

所以我的问题是双重的:

  • 为什么我不能在这两种类型之间进行转换?
  • 有什么方法可以保持使用实例的好处,MyClass<Derived>同时仍然能够将其转换为MyClass<IMyInterface>
0 投票
2 回答
814 浏览

c# - C# 4 的协方差是否支持泛型嵌套?

我不明白为什么下面的“x”会转换,但“y”和“z”不会。

新的协方差特性是否根本不适用于泛型的泛型,或者我做错了什么?(我想避免使用 .Cast<> 来使 y 和 z 工作。)

0 投票
3 回答
2520 浏览

c++ - 返回 shared_ptr 时如何实现协变返回类型?

返回类型不是协变的(因此它们也不是合法的),但如果我使用原始指针,它们会是。解决这个问题的普遍接受的习语是什么,如果有的话?

0 投票
2 回答
730 浏览

scala - 在 Scala 中使用子类型和返回类型将通用对象处理为特定对象

我认为这是关于协方差,但我在这个话题上很弱......

我有一个通用的 Event 类,用于数据库持久性之类的事情,让我们这样说:

但是,我有很多不同的事件动词,我想对这些不同的事件类型使用模式匹配等,所以我将创建一些相应的案例类:

现在,问题是,我怎样才能轻松地将通用事件转换为特定的案例类。

这是我的第一次尝试:

不幸的是,这是错误的。

比我有更大类型fu的人可以解释一下,1)如果我想做的事情是可能的(或合理的,就此而言),以及2)如果是这样,如何解决event2CC。谢谢!

0 投票
2 回答
25027 浏览

c# - 了解 C# 中的协变和逆变接口

我在我正在阅读的 C# 教科书中遇到了这些,但我很难理解它们,可能是由于缺乏上下文。

对它们是什么以及它们有什么用处有一个很好的简明解释吗?

编辑澄清:

协变接口:

逆变接口: