【一】何为可变性可变性是.NET4.0中的一个新特性,可变性可分为 : 协变性、逆变性、不可变性.那么在.NET4.0之前是否有可变性? 答案是肯定的,我们可以通过下面的几个实例来简单的了解一下.NET4.0之前的协变和逆变.实例 1 : 方法参数的协变static void Main(string...
分类:
Web程序 时间:
2015-06-23 11:26:55
阅读次数:
169
转载C# 泛型的协变和逆变1. 可变性的类型:协变性和逆变性可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用。如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量。协变和逆变是两个相互对立的概念:如果某个返回的类型可以由其派生类型替换,那么这个类型就是支持协变的如果某个参数类...
分类:
其他好文 时间:
2015-05-04 09:57:40
阅读次数:
120
记得以前面试的时候曾被问过一个问题:数组和List的区别是什么?当时答的无非就是效率,容量固定,List不能存基本类型等等。当Java发展到了1.5之后,出现了泛型版本的List,又为这个问题的解答加入了一笔。下面就来讲一下与这个话题相关的内容。
数组的协变性(covariant)是指如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变的(invariant),List不会是List的基类,更不会是它的子类。 第二个要讲的问题是数组是具体化的(reifi...
分类:
编程语言 时间:
2015-04-19 17:59:00
阅读次数:
121
IEnumerable这个接口非常常见,它是最基础的泛型集合接口,表示可迭代的项的序列。但是奇怪的是为什么泛型参数要带一个“out”?经过一番资料查阅后,发现此“out”和C#中的“out”类型参数的“out”并非一个意思。IEnumerable中的out表示这个接口支持“协变性”。何谓“协变性”?...
分类:
编程语言 时间:
2014-11-08 19:33:59
阅读次数:
265
class Program { static void Main(string[] args) { StreamFactory factory = GenerateSampleData;//(3) using (S...
分类:
其他好文 时间:
2014-08-18 09:10:03
阅读次数:
188
假设class S { }class A : S { }class B : S { }下面的代码是可以编译通过的S[] array = new A[5];array[0] = new B();List list = new List();运行结果:第一行代码是可以编译通过的第二行代码运行时报错第三行...
分类:
其他好文 时间:
2014-07-02 00:53:50
阅读次数:
192