一、数组是引用类型,值类型的数组也是引用类型。
二、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方法。