首页 > 其他 > 详细

【CLR Via C#】16 数组

时间:2014-03-15 22:44:11      阅读:536      评论:0      收藏:0      [点我收藏+]
  • 所有的数组都隐式的从System.Array抽象类派生,后者又派生自System.Object
  • 数组是引用类型,所以会在托管堆上分配内存,数组对象占据的内存块包含数组的元素,一个类型对象指针、一个同步块索引和一些额外的成员。
  • 所有的数组都隐式的实现IEnumerable,ICollection和IList接口,只是实现这些接口,而非实现其泛型接口IEnumerable<T>等,其主要是考虑到多维数组和非零基数数组(非零基数是指数组的索引值不从0开始)。在创建一个数组的时候,会自动使数组类型实现IEnumerable<T>等接口。
  • 数组的转型条件必须是维数和并需存在一个隐式或显示的转换。如下代码所示
1
2
3
4
string [] strArray=new string[]{"luge","luya"};
object[] objArray=strArray;//转换成功
int [] intArray=new int[]{1,2};
objArray=intArray;//转换失败
  • 零基数组和非零基数组
     对于非零基数组的创建方式如下所示:
    Array intArray=Array.CreateInstance(typeof(Int32),new int[]{5},new int[]{1});
    Console.WriteLine(intArray.GetLowerBound(0));//1
    Console.WriteLine(intArray.GetUpperBound(0));//5
  • 多维数组(Multi-dimension)与交错数组(jagged Array)

  多维数组:一个整体的数组,在内存中占据一整块托管堆内存块

  交错数组:数组元素的维数和大小可以不同,交错数组有时候称为数组的数组。通过二维交错数组为例。其内存分配,通过第一维元素找到相对应的数组元素,如下例子所示,通过arr[0]的指向可以找到new int[5]的数组元素。从这例子中可以看到,对于一个二维且维数为2的交错数组,需要初始化3次数组。这样会产生效率问题。可以看出交错数组的消耗主要在创建和销毁上。
  日常的应用中,如果有多次访问,应该使用交错数组;对于一次访问应该使用多维数组
       //声明
        int[][] arr = new int[2][];
        // 初始化元素
        arr[0] = new int[5] { 1, 3, 5, 7, 9 };
        arr[1] = new int[4] { 2, 4, 6, 8 };    

【CLR Via C#】16 数组,布布扣,bubuko.com

【CLR Via C#】16 数组

原文:http://www.cnblogs.com/luge/p/ClR_Via_CSharp_Array.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!