这两天看了很多逆变与协变的知识,现将所学大概总结如下:
应用对象
泛型委托,泛型接口
概念 | 关键字 | 关注对象 | |
协变 | 细节化程度高的类型(子类)赋值给细节化程度低的类型(父类)。 | in | 方法参数 |
逆变 | 细节化程度低的类型(父类)赋值给细节化程度高的类型(子类)。 | out | 方法返回值 |
逆变与协变的相互作用
方法参数的协变-逆变互换原则。如下代码所示,有协变能力的IFoo要求他的泛型参数IBar有逆变能力。
1 public interface IBar<in T> {} 2 3 public interface IFoo<out T> 4 { 5 void Test(IBar<T> bar); 6 }
意义
实现委托参数类型的隐式转换。更好的体现继承和多态的特点
参考
http://msdn.microsoft.com/zh-cn/library/ee207183.aspx
http://www.cnblogs.com/lemontea/archive/2013/02/17/2915065.html
http://www.cnblogs.com/idior/archive/2010/06/20/1761383.html