设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 295|回复: 2
打印 上一主题 下一主题

.NET泛型中的协变与逆变

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-16 17:54:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当前。NET语言如VB和C#还不支持泛型的协变(covariance)与逆变(contravariance)。尽管微软中的很多人也在谈论它,但是在不远的将来这还是不太可能出现。对协变与逆变的完整介绍要花很长时间。基于此,请大家参考Eric Lippert的关于C#中的协变与逆变的系列文章。为了在VB中增加协变与逆变的泛型支持,Lucian Wischik提出了下面的语法。
 
  类型参数可由关键字“In”和“Out”修饰。“In”类型只能作为方法参数。与此类似,“Out”类型只能作为方法的返回类型。
 
  使用Out类型的一个例子就是IEnumerable(Of T)。如果某函数接受一个IEnumerable(Of Animal)类型参数,那么我们就可以给它传一个IEnumerable(of Bird)。对于In类型,一个不太恰当的例子就是顺序。看一下下面的接口:
 
  Interface IWriter(Of T) Write(value As T)
 
  如果你向接受Writer(Of Animal)类型参数的函数传一个IWriter(Of Bird),当然就不对了。该方法可以将Animal的任何子类传给IWriter.Write,但是它只接受Birds.
 
  如果使用注解,该接口看起来像下面这样:
 
  Interface IEnumerable(Of Out T)Interface IWriter(Of In T)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 02:01 , Processed in 0.116161 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表