我们知道子类转换到父类,在C#中是能够隐式转换的.这种子类到父类的转换就是协变. 而另外一种类似于父类转向子类的变换,可以简单的理解为“逆变”. 上面对逆变的简单理解有些牵强,因为协变和逆变只能针对接口和代理类型.而父类和子类之间不存在这种逆变的概念. 协变和逆变的本质都是子类安全的转到父类的过程. 下面就来加深下印象,先定义两个类Car和Baoma public class Car { } public class Baoma : Car { } 明显Baoma(宝马)是Car的子类 1,先来
去年写过一篇博客谈了下我自己对协变和逆变的理解,现在回头看发现当时还是太过“肤浅”,根本没理解.不久前还写过一篇“黑”Java泛型的博客,猛一回头又是“肤浅”,今天学习Java泛型的时候又看到了协变和逆变,感觉又理解了点,记录一下,但不免还是“肤浅”,看了这篇博客的同学,欢迎留言交流下.Markdown 什么是协变和逆变? 到底什么是协变和逆变?先看例子: //Java Object[] objects = new String[2]; //C# object[] objects = new s
看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> list = new ArrayList<Number>(); list.add(new Integer(1)); //error list.add(new Float(1.2f)); //error 有人会