【问题标题】:Covariance and Contravariance [duplicate]协方差和逆变[重复]
【发布时间】:2011-04-06 01:28:45
【问题描述】:

可能的重复:
Covariance and contravariance real world example
still confused about covariance and contravariance & in/out

您能否给我一个关于协方差和逆方差的描述或示例,以及为什么他们现在决定将其添加到 .NET 4 中?

【问题讨论】:

标签: c# .net design-patterns


【解决方案1】:

如果 B 继承自 A,即是 A 的子类型,则如果 C(B) 是 C(A) 的子类型,则 C 函数是协变的,如果 C(A) 是 C(B) 的子类型则是逆变的。

问题是您是否希望消费者处理超类型或子类型。

一个常见的例子是处理水果类的类库。

我可以在你期望得到水果的地方给你一个苹果。 我不能在你期望苹果的地方给你任何水果。

如果你正在制作一个水果库。你应该期待我的实例,我应该期待你的实例。我们都不应该对可能是错误的子类型抱有期望。

因此,上述问题的答案取决于您是接收还是发送。参数是读还是写。 水果列表应该接受香蕉或苹果,但只发送“水果”

【讨论】:

    【解决方案2】:

    由于没有给出答案,我只是总结了 cmets

    stackoverflow.com/questions/245607/ – MainMa

    stackoverflow.com/questions/2662369/ stackoverflow.com/questions/1163465/ stackoverflow.com/questions/3445631/ – 56 分钟前在 Sane

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多