MOF 数组
数组是具有相同数据类型的数据值的索引列表,你可以引用这些数据值。 除了字符串和数字数组外,MOF 还支持嵌入对象和引用的数组。
以下规则定义了 MOF 数组:
属性标识符后使用的括号指定类定义中的数组。
Class ArrayDataSample1 { string strArray1[]; };
所有数组都必须是一维数组。
数组可以是无界的,也可以具有显式大小。
Class MyClass { sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskArray1[]); sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskArray2[32]); };
WMI 将有界和无界数组实现为 SAFEARRAY 结构,这使得 WMI 在运行时能够改变数组维度。 声明具有显式大小的数组时,WMI 会将该大小存储为限定符,并将该大小视为建议的最大大小。 但是,WMI 可在必要时扩展大小。 更改显式大小不会影响实际数据。
通过在逗号分隔的列表中指定相应类型的值来初始化数组。
Class ArrayDataSample2 { [key] string s; string strArray2[] = {"hello", "there"}; sint32 dwArray[] = {1,2,3}; };
引用数组声明为对象路径字符串数组。
声明对象路径字符串时,不要在对象路径的元素之间放置空格。 以下示例说明如何声明对象路径引用。
Class ClassWithRefArray { [key] string s; object ref refArray[]; }; instance of ClassWithRefArray { s = 23; refArray = {"Disk.Name=\"C:\"", "Disk.Name=\"E:\""}; };
可以将数组用作方法的参数,但不能用作输入或输入输出参数的返回值。
数组中的所有元素都创建为相同类型的值。
如果数组的元素属于对象类型,可以在数组中放置任何类型的对象。 另一方面,如果声明特定类型的对象,则 WMI 仅允许数组中该类或子类的对象。 以下示例演示包括使用对象类型的数组声明。
Class EmbedClass { [key] sint32 PropOfClass; }; Class ArrayDataClass { [key] string s; string strArray1[]; string strArray2[] = {"hello", "there"}; sint32 dwArray[] = {1,2,3}; EmbedClass objArray[]; }; instance of ArrayDataClass { s = "keyStuff"; strArray1 = { "1.2.3.4", "1.2.3.5", "1.2.3.7"}; strArray2 = { "SELECT * FROM RegistryKeyChangeEvent", "SELECT * FROM RegistryValueChangeEvent", "SELECT * FROM RegistryTreeChangeEvent" }; dwArray = { 1,2,3,5,6 }; objArray = { instance of EmbedClass{PropOfClass=3;}, instance of EmbedClass{PropOfClass=4;} }; };