这两天阅读了第5章和第6章,昨天加班到很晚,没时间书写,今天补上。
对于数组我有这些体会:
数组可分为简单数组、多维数组和锯齿数字。
数组可以使用数据类型加[]来声明,然后使用new和数组元素或数组元素长度(length)来初始化。
数组中的元素使用索引来访问。
Array类是一个抽象类,不能直接实例化来创建数组,但是可以使用Array的static 方法来创建数组,使用GetValue()读取值,SetValue()设置值。
使用Array类可以创建索引不基于0个数组。
可以使用ICloneabel接口定义的Clone()方法来创建数组的浅表副本。如果数组元素是值类型,就会复制所有的值,如果数组元素是引用类型,就只复制引用。
Array.Copy()方法也可以创建浅副本,与Clone()的区别在于后者会创建一个新的数组,而前者只是传送了阶数相同、有足够元素空间的已有数组。
如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象。
Array实现对数组的冒泡排序。Sort()方法需要实现数组中的元素实现IComparable接口,基本类型已实现该接口,而自己定义的类型必须实现该接口的唯一方法CompareTo()。Sort()的2个参数的重载形式需要实现IComparer的方法CompareTo()。
IEumerable接口是又foreach语句用于迭代数组的接口。ICollection接口派生于IEumerable接口,IList接口派生与ICollection接口。
C#的foreach语句不会解析为IL代码中的foreach语句。C#编译器会把foreach语句转换为IEumerable接口的方法和属性。
yield return 语句用于返回集合的一个元素,并移动到下一个元素上。yield break可停止迭代。
运算符:
is运算符可以检查对象是否与特定的类型兼容。
as运算符用于执行引用类型的显式类型转换。
sizeof运算符可以确定堆栈中值类型需要的长度(单位是字节)。
typeof运算符返回一个表示特定类型的System.Type对象。
可空类型?
空接合运算符??
类型转换分为隐式转换(implicitly)和显式转换(explicitly)。
对象的相等比较。
运算符使用关键字operator来重载。
读下来就觉得讲解IEumerable时有些不懂,运算符重载有些难理解,仔细想想也就懂了。