接口的协变与抗变
2015-08-01 22:18
309 查看
协变和抗变指对参数和返回值的类型进行转换。
如果泛型类型用out关键字标注,泛型接口就是协变的。 这也意味着返回类型只能是T。接口Index与类型T是协变的,并从一个只读索引器中返回这个类型;
如果泛型类型用in关键字标注,泛型接口就是抗变的,接口只能把泛型类型T用作其方法的输入。
如果对接口Iindex使用了制度索引器,就把泛型类型T传递给方法,并从方法中检索这个类型,这不能通过协变来实现--泛型类型必须定义为不变的。不适用out和in标注,就可以把类型定义为不变的。
如果泛型类型用out关键字标注,泛型接口就是协变的。 这也意味着返回类型只能是T。接口Index与类型T是协变的,并从一个只读索引器中返回这个类型;
public interface IIndex<out T> { T thisIint index{get; } int Count {get;} }
如果泛型类型用in关键字标注,泛型接口就是抗变的,接口只能把泛型类型T用作其方法的输入。
public interface IDisplay<in T> { id show(T item); }
如果对接口Iindex使用了制度索引器,就把泛型类型T传递给方法,并从方法中检索这个类型,这不能通过协变来实现--泛型类型必须定义为不变的。不适用out和in标注,就可以把类型定义为不变的。
相关文章推荐
- MongoDB的安装
- jQuery学习之用自定义插件来扩展jQuery
- JSP起源、JSP的运行原理、JSP的执行过程
- 判断闰年平年的小程序
- [leedcode 154] Find Minimum in Rotated Sorted Array II
- 我在工作中遇到的web问题汇总
- 剑指Offer面试题18(Java版):树的子结构
- C#中 DataGridView 属性说明(转载)
- js 函数式编程 浅谈
- java中的类
- Node.js自动化技术实现(Java)
- java发送post请求和get
- 0-1背包问题
- lucene & Lucene Spatial
- SDWebImage分析--源代码详细分析
- 04循环结构
- LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作
- chromium源码阅读(4)-线程模型之IO线程
- ZOJ_1366_CashMachine
- Android 出厂设置修改