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

协方差和反方差不支持值类型的原因

协方差和反方差不支持值类型的原因

C#
catspeake 2019-06-17 14:28:43
协方差和反方差不支持值类型的原因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:方差仅适用于引用类型;如果为变量类型参数指定值类型,则该类型参数对于结果构造的类型是不变的。我查了一下,发现提到的一些问题的原因是值类型与引用类型之间的装箱..但是它仍然没有让我头脑清醒很多,为什么拳击是原因?请有人给出一个简单而详细的解释,为什么协方差和反方差不支持值类型,以及如何拳击影响这个?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

我想一切都是从LSP(Liskov替代原则),其中规定:

如果Q(X)是关于T型对象x的一个可证明的性质,那么对于S类型的对象y,Q(Y)应该是真的,其中S是T的一个子类型。

但是值类型,例如int不可替代的object在……里面C#..证明很简单:

int myInt = new int();object obj1 = myInt ;object obj2 = myInt ;return ReferenceEquals(obj1, obj2);

这回false即使我们分配“引用”对象。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 444 浏览

添加回答

举报

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