为了账号安全,请及时绑定邮箱和手机立即绑定

协方差与反方差之差

协方差与反方差之差

慕容森 2019-07-04 12:55:18
协方差与反方差之差我很难理解协方差和反方差之间的区别。
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

给出例子可能是最简单的-这就是我记得它们的方式。

协方差

典型的例子:IEnumerable<out T>Func<out T>

您可以从IEnumerable<string>IEnumerable<object>,或Func<string>Func<object>..价值只会到来这些东西。

这是因为如果您只从API中提取值,并且它将返回特定的值(例如string),您可以将返回的值视为更一般的类型(如object).

反方差

典型的例子:IComparer<in T>Action<in T>

您可以从IComparer<object>IComparer<string>,或Action<object>Action<string>价值只会消失这些东西。

这一次它起作用了,因为如果api期望的是一些通用的东西(例如object)你可以给它一些更具体的东西(比如string).

更一般

如果你有一个接口IFoo<T>它可以是协变的T(即声明为IFoo<out T>如果T仅用于接口中的输出位置(例如返回类型)。它可以在T(即:IFoo<in T>)如果T仅用于输入位置(例如参数类型)。

它可能会引起混淆,因为“输出位置”并不像听起来那么简单-一个类型的参数。Action<T>仍然只使用T在输出位置上Action<T>如果你明白我的意思。这是一个“输出”,因为这些值可以从方法的实现中传递走向调用者的代码,就像返回值一样。这类事情通常不会出现,幸运的是:)


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 535 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信