Класс MWStruct
передает или получает тип Struct
к или из метода скомпилированного класса. Этот класс содержит семь свойств/методов:
Этот метод выделяет массив структур с конкретным количеством и размером размерностей и заданным списком имен полей.
Аргумент | Ввод | Описание |
---|---|---|
|
|
Дополнительный массив размерностей |
|
|
Дополнительный массив имен полей |
'none'.
Когда создано, объект MWStruct
имеет размерность 1 на 1 и никаких полей. Метод Initialize
определяет размеры массива и добавляет набор именованных полей к каждому элементу. Каждый раз, когда вы вызываете Initialize
на том же объекте, он повторно определен размеры. Если вы не предоставляете аргумент varDims
, существующий номер и размер неизменных размерностей массива. Если вы не предоставляете аргумент varFieldNames
, существующий список полей не изменяется. Вызов Initialize
без аргументов оставляет массив без изменений.
Следующий Визуальный код Basic® иллюстрирует использование метода Initialize
, чтобы определить размеры массивов структур.
Sub foo () Dim x As MWStruct Dim y As MWStruct On Error Goto Handle_Error 'Create 1X1 struct arrays with no fields for x, and y Set x = new MWStruct Set y = new MWStruct 'Initialize x to be 2X2 with fields "red", "green", ' and "blue" Call x.Initialize(Array(2,2), Array("red", "green", "blue")) 'Initialize y to be 1X5 with fields "name" and "age" Call y.Initialize(5, Array("name", "age")) 'Re-dimension x to be 3X3 with the same field names Call x.Initialize(Array(3,3)) 'Add a new field to y Call y.Initialize(, Array("name", "age", "salary")) Exit Sub Handle_Error: MsgBox(Err.Description) End Sub
Свойство Item
является свойством по умолчанию класса MWStruct
. Это свойство используется, чтобы установить/получить значение поля в конкретном индексе в массиве структур.
Аргумент | Ввод | Описание |
---|---|---|
|
|
Дополнительные индексные аргументы. Между 0 и 32 индексами могут быть введены аргументы. Чтобы сослаться на элемент массива, задайте все индексы, а также имя поля. |
При доступе к именованному полю через это свойство необходимо предоставить все размерности требуемого поля, а также имени поля. Это свойство всегда возвращает одно значение поля и генерирует плохую индексную ошибку, если вы предоставляете недопустимый или неполный список индексов. Индексные аргументы имеют четыре основных формата:
Имя поля только
Этот формат может использоваться только в случае массива структур 1 на 1 и возвращает значение именованного поля. Например:
x("red") = 0.2 x("green") = 0.4 x("blue") = 0.6
В этом примере пропустили именем свойства Item
. Это возможно, поскольку свойство Item
является свойством по умолчанию класса MWStruct
. В этом случае эти два оператора эквивалентны:
x.Item("red") = 0.2 x("red") = 0.2
Один индекс и имя поля
Этот формат элементы массива доступов через одно обозначение индексирования. Один числовой индекс n
, сопровождаемый именем поля, возвращает именованное поле на n
th элемент массива, перемещаясь по массиву линейно в порядке развертывания по столбцам. Например, считайте массив 2 на 2 структур с полями "red"
, "green"
и "blue"
сохраненным в переменной x
. Эти два оператора эквивалентны:
y = x(2, "red") y = x(2, 1, "red")
Все индексы и имя поля
Этот формат получает доступ к элементу массива многомерного массива путем определения индексов n
. Эти операторы доступ все четыре из элементов массива в предыдущем примере:
For I From 1 To 2 For J From 1 To 2 r(I, J) = x(I, J, "red") g(I, J) = x(I, J, "green") b(I, J) = x(I, J, "blue") Next Next
Массив индексов и имени поля
Этот формат получает доступ к элементу массива путем передачи массива индексов и имени поля. Следующий пример переписывает предыдущий пример с помощью индексного массива:
Dim Index(1 To 2) As Integer For I From 1 To 2 Index(1) = I For J From 1 To 2 Index(2) = J r(I, J) = x(Index, "red") g(I, J) = x(Index, "green") b(I, J) = x(Index, "blue") Next Next
С этими четырьмя форматами свойство Item
обеспечивает очень гибкий механизм индексации для массивов структур. Также отметьте:
Можно объединить последние два формата индексации. Несколько индексных аргументов, предоставленных или в скаляре или в формате массивов, конкатенированы, чтобы сформировать один индексный набор. Объединяющиеся остановки, когда количество размерностей было достигнуто. Например:
Dim Index1(1 To 2) As Integer Dim Index2(1 To 2) As Integer Index1(1) = 1 Index1(2) = 1 Index2(1) = 3 Index2(2) = 2 x(Index1, Index2, 2, "red") = 0.5
Последний оператор разрешает
x(1, 1, 3, 2, 2, "red") = 0.5
Имя поля должно быть последним индексом в списке. Следующий оператор производит ошибку:
y = x("blue", 1, 2)
Имена полей являются чувствительными к регистру.
Свойство NumberOfFields
только для чтения возвращает количество полей в массиве структур.
Свойство NumberOfDims
только для чтения возвращает количество размерностей в массиве структур.
Свойство Dims
только для чтения возвращает массив длины NumberOfDims
, который содержит размер каждой размерности массива структур.
Свойство FieldNames
только для чтения возвращает массив длины NumberOfFields
, который содержит имена полей элементов массива структур.
Следующий пример кода Visual Basic иллюстрирует, как получить доступ к полям двумерного массива структур, когда имена полей и размеры размерности не известны заранее.
Sub foo () Dim x As MWStruct Dim Dims as Variant Dim FieldNames As Variant On Error Goto Handle_Error ' '... Call a method that returns an MWStruct in x ' Dims = x.Dims FieldNames = x.FieldNames For I From 1 To Dims(1) For J From 1 To Dims(2) For K From 1 To x.NumberOfFields y = x(I,J,FieldNames(K)) ' ... Do something with y Next Next Next Exit Sub Handle_Error: MsgBox(Err.Description) End Sub
Создает копию объекта MWStruct
.
Аргумент | Ввод | Описание |
---|---|---|
|
|
Ссылка на неинициализированный объект |
'none'
Clone
выделяет новый объект MWStruct
и создает глубокую копию содержимого объекта. Вызовите эту функцию, когда отдельный объект будет требоваться вместо разделяемой копии существующей ссылки на объект.
Следующий пример Visual Basic иллюстрирует различие между присвоением и Clone
для объектов MWStruct
.
Sub foo () Dim x1 As MWStruct Dim x2 As MWStruct Dim x3 As MWStruct On Error Goto Handle_Error Set x1 = new MWStruct x1("name") = "John Smith" x1("age") = 35 'Set reference of x1 to x2 Set x2 = x1 'Create new object for x3 and copy contents of x1 into it Call x1.Clone(x3) 'x2's "age" field is 'also modified 'x3's "age" field unchanged x1("age") = 50 . . . Exit Sub Handle_Error: MsgBox(Err.Description) End Sub