zoukankan      html  css  js  c++  java
  • 数组 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方法。

  • 相关阅读:
    策略模式c++【转】
    [转]C++设计模式:Builder模式
    c/c++ 笔试面试题
    堆排序
    冒泡,快速,和堆排序
    C++继承
    【转】林建:计算机专业学习浅谈
    (centos)linux下访问双系统windows7文件系统
    sprintf() in c
    System call in linux by C
  • 原文地址:https://www.cnblogs.com/gowhy/p/2013663.html
Copyright © 2011-2022 走看看