我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:四肖中特 > 泛型方法 >

NET 泛型中的协变与逆变

归档日期:04-26       文本归类:泛型方法      文章编辑:爱尚语录

  当前.NET 语言如 VB 和 C# 还不支持泛型的协变(covariance)与逆变(contravariance)。尽管微软中的很多人也在谈论它,但是在不远的将来这还是不太可能出现。对协变与逆变的完整介绍要花很长时间。基于此,请大家参考 Eric Lippert 的关于 C# 中的协变与逆变的系列文章。为了在 VB 中增加协变与逆变的泛型支持,Lucian Wischik 提出了下面的语法。

  类型参数可由关键字“In”和“Out”修饰。“In”类型只能作为方法参数。与此类似,“Out”类型只能作为方法的返回类型。

  不幸的是,这种语法并不能直接应用在大多数常见的场景中。比如 IList(Of T),当传给一个向集合中写入的方法时,T 应该是 In 类型。但是当传给一个从集合中读取的方法时,T 应该是 Out 类型。或许这里应该针对 IList 创建一个基类,该类会将接受 T 与返回 T 的方法区分开来。

  追溯过去,C# 和 VB 都支持数组协变(out/IEnumerable 情况),尽管在逆变的情况下这会导致运行时错误(in/IWriter 情况)。这样做的目的是使 C# 更兼容于 Java。大多数人都认为这是一个不好的设计,但是现在却无法改变了。

本文链接:http://pebeducation.com/fanxingfangfa/162.html