Tablice MOF
Tablica jest indeksowaną listą wartości danych, które są tego samego typu danych, do których można się odwołać. Oprócz tablic ciągowych i liczbowych moF obsługuje tablice obiektów osadzonych i odwołań.
Następujące reguły definiują tablicę MOF:
Nawiasy używane po identyfikatorze właściwości określają tablicę w definicji klasy.
Class ArrayDataSample1 { string strArray1[]; };
Wszystkie tablice muszą być jednowymiarowe.
Tablice mogą być niezwiązane lub mają jawny rozmiar.
Class MyClass { sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskArray1[]); sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskArray2[32]); };
Usługa WMI implementuje powiązane i niezwiązane tablice jako struktury SAFEARRAY, dzięki czemu usługa WMI może różnić wymiary tablicy w czasie wykonywania. W przypadku deklarowania tablicy o jawnym rozmiarze usługa WMI przechowuje rozmiar jako kwalifikator i traktuje rozmiar jako sugerowany maksymalny rozmiar. Jednak w razie potrzeby usługa WMI może rozszerzyć rozmiar. Zmiana jawnego rozmiaru nie ma wpływu na rzeczywiste dane.
Tablice są inicjowane przez określenie wartości odpowiedniego typu na liście rozdzielanej przecinkami.
Class ArrayDataSample2 { [key] string s; string strArray2[] = {"hello", "there"}; sint32 dwArray[] = {1,2,3}; };
Tablica odwołań jest zadeklarowana jako tablica ciągów ścieżki obiektu.
Podczas deklarowania ciągu ścieżki obiektu nie umieszczaj odstępu między elementami ścieżki obiektu. W poniższym przykładzie opisano sposób deklarowania odwołania do ścieżki obiektu.
Class ClassWithRefArray { [key] string s; object ref refArray[]; }; instance of ClassWithRefArray { s = 23; refArray = {"Disk.Name=\"C:\"", "Disk.Name=\"E:\""}; };
Tablicę można użyć jako parametru dla metody, ale nie jako wartości zwracanej dla parametru wejściowego lub wejściowego.
Wszystkie elementy w tablicy są tworzone jako wartości tego samego typu.
Jeśli elementy tablicy są typu obiektu, można umieścić dowolny rodzaj obiektu w tablicy. Z drugiej strony, jeśli zadeklarujesz określony typ obiektu, usługa WMI zezwala tylko na obiekty tej klasy lub podklasy w tablicy. W poniższych przykładach pokazano deklaracje tablic, które obejmują używanie typu obiektu.
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;} }; };