文件名称:数组初始值设定项-eda技术实用教程 vhdl版(第四版) 潘松 科学出版社
文件大小:4.12MB
文件格式:PDF
更新时间:2024-07-07 04:50:10
C#
12.3 数组元素访问 数组元素使用形式为 A[I1, I2, ..., IN] 的 element-access 表达式(第 7.6.6.1 节)进行访问,其中 A 是 数组类型的表达式,每个 IX 都是 int、uint、long、ulong 类型的表达式,或者可以隐式转换为这些 类型的一种或多种类型。数组元素访问的结果是变量,即由下标选定的数组元素。 此外,还可以使用 foreach 语句(第 8.8.4) 节)来枚举数组的各个元素。 12.4 数组成员 每个数组类型均继承由 System.Array 类型声明的成员。 12.5 数组协变 对于任意两个 reference-type A 和 B,如果存在从 A 到 B 的隐式引用转换(第 6.1.6 节)或显式引用转换 (第 6.2.4 节),则也一定存在从数组类型 A[R] 到数组类型 B[R] 的相同的引用转换,其中 R 可以是任 何给定的 rank-specifier,但这两个数组类型必须使用相同的 R。这种关系称为数组协变。具体而言,数 组协变意味着数组类型 A[R] 的值实际上可能是对数组类型 B[R] 的实例的引用(如果存在从 B 到 A 的 隐式引用转换)。 由于存在数组协变,对引用类型数组的元素的赋值操作会包括一个运行时检查,以确保正在赋给数组元 素的值确实是允许的类型(第 7.17.1 节)。例如: class Test { static void Fill(object[] array, int index, int count, object value) { for (int i = index; i < index + count; i++) array[i] = value; } static void Main() { string[] strings = new string[100]; Fill(strings, 0, 100, "Undefined"); Fill(strings, 0, 10, null); Fill(strings, 90, 10, 0); } } Fill 方法中对 array[i] 的赋值隐式包括运行时检查,该检查可确保由 value 引用的对象是 null 或 与 array 的实际元素类型兼容的实例。在 Main 中,Fill 的前两次调用会成功,但第三次调用在执行 array[i] 的第一个赋值操作时会引发 System.ArrayTypeMismatchException。发生此异常是因为装 箱的 int 类型不能存储在 string 数组中。 具体而言,数组协变不能扩展至 value-type 的数组。例如,不存在允许将 int[] 当作 object[] 来处理 的转换。 12.6 数组初始值设定项 数组初始值设定项可以在字段声明(第 10.5 节)、局部变量声明(第 8.5.1 节)和数组创建表达式(第 7.6.10.4 节)中指定: array-initializer: { variable-initializer-listopt } { variable-initializer-list , } variable-initializer-list: variable-initializer variable-initializer-list , variable-initializer