数组 CLR学习第十三课

一、数组是引用类型,值类型的数组也是引用类型。
 
二、int[] myint;  myint = new int[100];
首先myint被神秘为一个指向元素类型int的一维数组变量,此时myint被设置为null

。当分配100个int的数组时,所有这些int元素值都被初始化为0.虽然int属于值类型

,单保存这些int值的内存块却是从托管堆中分配的。该内存包含100个为装箱的int

值,最后代码返回保存这些int值的内存块地址,并将其保存在变量myint中。

Control[] myCtr; myCtr= new Control[50];
首先myCtr被设置为null,然后分配一个包含50个Control引用的数组,所有这些

Control的引用都被初始化为null,因为Control属于引用类型,所有我们创建的仅仅

是引用,而不是实际的对象,最后代码返回保存这些引用的内存地址,并将其保存在

变量myCtr中。

三、尽可能使用0基数组,在各种类型数组中其性能最好,兼容CLS(交错数组不兼容

CLS);索引超出抛出System.IndexOutOfRangeException异常。

四、所有数组继承自System.Array,其共实现了ICloneable、IEnumerable、

ICollection、IList接口;CLR不允许将元素为值类型的数组转换为其他任何类型,

其是通过,Array.Copy(将值类型装箱为引用类型;将引用类型装箱为值类型,拓宽

CLR基元类型)创建来实现的,并且其是浅拷贝。引用类型元素的数组,可以实现显

示或者隐式转换为另一种类型。
五、数组总是以引用的方式传递给方法的,Array.Copy是浅拷贝,如果源数组中的元

素是引用类型,该方法返回的新数组中的元素将指向源数组中元素所引用的对象;实

现数组的深拷贝方法是实现ICloneable接口,将一个对象序列化到一个

System.IO.MemoryStream中,然后再立即对该内存流执行反序列化,从而得到一个新

的对象,性能损失、有可能所有的对象都被序列化。

六、可以创建下限非0的数组,用Array.CreateInstance方法。

posted @ 2011-04-12 15:00  狼-志  阅读(279)  评论(0编辑  收藏  举报