《CLR via C#》基本类型.数组

16.数组

数组隐式继承System.Array抽象类,后者又派生自System.Object,这意味着数组是引用类型。
一维数组:int[] array1 = new int[10];,array1是对数组的引用,该语句会在托管堆上分配容纳10个int值的内存块,并返回这个内存块的地址,赋给array1。
二维数组:int[,] array2 = new int[10, 20];
锯齿数组(又叫交错数组):int[][] array3 = new int[3][]; array3[0] = new int[4] { 2, 4, 5, 6 }; array3[1] = new int[5] { 1, 5, 45, 48, 0 }; array3[2] = new int[3] { 54, 5, 2 };

16.1初始化数组元素

创建数组对象时初始化数组的元素:string[] names = new string[] { "jump", "chen" }; { “jump”, “chen” }是数组初始化器,可简写为:var names = new[] { "jump", "chen" };string[] names = { "jump", "chen" };

16.2所有数组都隐式派生自System.Array

System.Array类定义了许多有用的实例方法、属性(长度Length、维数Rank等)、静态方法(BinarySearch、Sort等),挺有用的,需要用时查阅文档吧。

16.3所有数组都隐式实现IEnumerable,ICollection,IList

Array默认实现了IEnumerable、ICollection、IList这些非泛型接口,因为涉及多维数组和非0基数组的问题,所以不得不这样做。但耍了一个小花招,创建一维0基数组类型时,CLR自动使数组类型实现IEnumerable<T>、ICollection<T>、IList<T>这三个泛型接口。

16.4数组的传递和返回

数组可作为方法的实参,实际传递的是对数组的引用,因此该方法能修改数组中的元素,如果数组不想被修改,就得用Ayyay.Copy方法执行对原始数组的浅拷贝并将拷贝传给方法。
数组可作为方法的返回值,同理。

16.5创建下限非零的数组

最好别用

16.6数组的内部工作原理

访问一维0基数组的元素比访问非0基一维数组的元素快,原因:1.有些IL指令用于处理一维0基数组时,JIT编译器能生成优化代码;2.对于一维0基数组,JIT编译器能将索引范围检查代码从循环中拿出,只会执行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值