C#学习2——数组、运算符与类型转换

时间:2023-01-28 20:47:23

    这两天阅读了第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时有些不懂,运算符重载有些难理解,仔细想想也就懂了。