黑马程序员10——结构和数组相关概念和重点

  ---------------------- Windows Phone 7手机开发.Net培训、 期待与您交流!----------------------


结构

结构是值类型——所以存放在栈上,复制的时候copy备份。
结构是密封的,不能被继承。
结构字段不能初始化。
注意:虽然在C#中预定义简单类型(int、short、long,等等)被视作原始类型,其实它们在.NET中都被实现为结构。

数组

几个概念

  • 元素:
  • 秩/维度:
  • 维度长度:数组的每一个维度有一个长度。
  • 数组长度:

C#不支持动态数组,一旦创建,大小就固定了。

  • 一维数组
  • 多维数组
    • 矩形数组: int[,,] x = ;
    • 交错数组: int[][] x =           

三种数组的可视化模型如下:



数组是引用类型

维度是数组类型的一部分,而维度长度不是类型的一部分——所以,不能在数组类型区域放数组维度长度。
int[,,] firstArray;    //正确
long[2,3] secondArray; //错误


数组初始化时,使用数组创建表达式: int[] inArr1= new int[15];

new int[15]就是数组创建表达式,它和对象创建表达式不同,一个为[],一个为()。默认初始化后,每个元素的值为默认值。

可以显式初始化数组:int[] intArr1= new int[]{1,2,3};

实例化交错数组

交错数组的完全初始化不能在一个步骤完成。由于交错数组是独立数组的数组——每一个数组必须独立创建。
1.首先,实例化顶层数组
2.其次,分别实例化每一个字数组,把新建数组的引用赋值给包含它们的数组的合适元素。

因为交错数组的子数组本身就是数组,因此交错数组中也可能有矩形数组。

在CIL中,一维数组有特定的指令用于性能优化。矩形数组没有这些指令,并且不在相同级别上进行优化。So,优势使用一维数组(可以被优化)的交错数组相比矩形数组(不能被优化)会更有效率。

foreach的迭代变量是只读的,所以它不能被改变。但是,对于值类型数组和引用类型数组而言效果不同。
为什么:在foreach内部,对值类型数组来说,迭代变量就是实际数据,不能被改变。
但是,对引用类型数组来说,迭代变量只是引用,引用不能改变,但是可以改变引用指向的实际数据。

foreach迭代时:
1.迭代矩形谁组时,只需要一个foreach就可以迭代所有元素。
2.迭代交错数组时,需要多个嵌套foreach来迭代所有元素。

数组协变(array covariance)

可以把子类型赋给基类型数组,满足下列条件
  • 数组是引用类型数组
  • 在赋值的对象类型和数组基类型之间有隐式转换或显式转换

数组总结



 ----------------------Windows Phone 7手机开发.Net培训、 期待与您交流!----------------------


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值