结构是值类型——所以存放在栈上,复制的时候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培训、 期待与您交流!----------------------