热点随笔: · 实习两个月,写在辞职的今天(婷风)· 数据库高可用实战案例 架构优化之清爽一夏(Double_K)· 那些年搞不懂的术语、概念:协变、逆变、不变体(农码一生)· 【无私分享:ASP.NET CORE 项目实战(第十二章)】添加对SqlServer、MySql、Oracle的支持(果冻 ...
分类:
其他好文 时间:
2016-09-05 09:14:31
阅读次数:
212
首先, 假设有一下三个类的继承关系 class Person { public string Name { get; set; } } class Student: Person { public string Class { get; set; } //班级 } class HighSchoolS... ...
分类:
其他好文 时间:
2016-09-01 20:07:26
阅读次数:
176
1.动态(晚期)联编需要显示定义复制构造函数,赋值运算符,虚构函数。 2.纯虚类不能声明对象。 3.赋值运算符的特征标随类而异。 4.返回类型协变,重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类的引用或指针,则可以修改为改变指向派生类的引用或指针。 5.保护访问,对于派生类来说 ...
分类:
其他好文 时间:
2016-09-01 14:42:01
阅读次数:
129
简述什么是协变性、逆变性、不变性 协变性,如:string->object (子类到父类的转换) 逆变性,如:object->string (父类到子类的转换) 不变性,基于上面两种情况,不可变。具体下面再做分析。 泛型委托的可变性 先使用框架定义的泛型委托Func和Action做例子(不了解的请戳 ...
分类:
其他好文 时间:
2016-08-29 09:12:07
阅读次数:
258
协变 案例一: c不能赋值给c2,因为Covariant定义成不变类型。 稍微改一下: 因为Consumer定义成协变类型的,所以Covariant[Bird]是Covariant[Animal]的子类型,所以它可以被赋值给c2。 Scala的逆变: 这里Consumer[-T]定义成逆变类型,所以 ...
分类:
其他好文 时间:
2016-08-27 09:47:35
阅读次数:
163
例:(引用自Job Log的博客:http://blog.csdn.net/baidu_20993761/article/details/47272597) public delegate TResult Func<out TResult>();// TResult类型是返回值类型public de ...
Java 接口和抽象类小记 @author ixenos 接口 1.接口没有构造函数,因为接口是不能被实例化的2.匿名对象如果使用接口的构造器也只是表示了一个协变的实现了接口的匿名对象3.接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。4.接口里面的方法默 ...
分类:
编程语言 时间:
2016-08-21 12:15:26
阅读次数:
135
看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> list = new ArrayList<Nu ...
分类:
编程语言 时间:
2016-08-20 11:24:48
阅读次数:
184
在某些情况下,即使某个对象不是数组的基类型,我们也可以把它赋值给数组元素。这种属性叫做协变(covariance)。在下面的情况下可以使用协变: 数组是引用类型数组。 在赋值的对象类型和数组基类型之间有隐式转换或显式转换。 由于在派生类和基类之间总是有隐式转换的,因此总是可以将一个派生类的对象赋值给 ...
分类:
编程语言 时间:
2016-08-01 15:48:00
阅读次数:
214
数组与泛型相比,有两个重要的不同点。数组是协变的(如果Sub是Super的子类型,那么数组类型Sub[]是Super[]的子类型),相反,泛型是不可变得,对于任意两个不同的类型T1和T2,List<T1>和List<T2>没有子类型或超类型的关系。 一段代码: 会有一条警告,编译器无法再编译时知道E ...
分类:
编程语言 时间:
2016-07-29 19:01:24
阅读次数:
174