• 数组 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方法。

  • 相关阅读:
    1008 Elevator
    mysql---时间类型详解
    mysql导入导出
    mysql不能启动报error2013错误的解决办法
    mysql总结
    mysql安装图解
    Access连接数据源配置(新手必知)
    eclipse建包的一些细节
    数据库操作(存着用来复制省的每次写)
    (工具类)MD5算法|时间格式转换|字符串转数字
  • 原文地址:https://www.cnblogs.com/gowhy/p/2013663.html
Copyright © 2020-2023  润新知