C# 高级编程 第5章 数组 总结
数组是引用类型,所以在初始化的时候就会给他们分配堆上内存。
声明多维数组 例 三维数组 : i
nt[,,] num={{{1,1},{4,3}},{{2,3},{3,4}}}; (数组必须对称)
声明锯齿数组 例 二维数组:
int[][] num =new int [2][];
num[0]=new int[2]{1,2};
num[1]=new int[5]{1,2,3,4,5};
用括号声明数组是C#中使用Array类的记号。会生成一个派生于抽象类Array的一个新类,array类实现了IEumerable、ICollection,IList 接口,以访问和枚举数组中的元素。由于用定制数组创建的类派生于Array抽象类,所以能通过数组变量执行接口中得方法或属性。
C#中得foreach语句不会解析IL代码中的foreach语句。C#编译器会把foreach语句IEnumerable接口的方法和属性。首先调用GetEnumerator()方法,获得数组的一个枚举。在while循环中只要MoveText()返回true,用Current属性访问数组中得元素。
例:foreach(person p in persons)
{
Console.Writeline(p);
}
解析为:
IEnumerator enumerator=persons.GetEnumerator();
while(enumerator.MoveNext())
{
person p=(person) enumerarot.Current;
Console.Writline(p);
}
其实 就是 GetEnumerator()实现了IEnumerable中得 GetEnumerator(), 它返回一个实现IEnumerator 接口的对象。
IEnumerator 接口的方法和属性:
MoveNext() 方法 移动到集合的下一个元素,如果有这个元素就返回true,否则返回false。
Current 属性 返回光标所在的元素
Reset() 方法 将光标重新定位于集合的开头。许多枚举会抛出NotSupportedException异常
浙公网安备 33010602011771号