MWStruct класс проходит или получает Struct введите в или из скомпилированного метода класса. Этот класс содержит семь свойств/методов:
Этот метод выделяет массив структуры с указанным числом и размером измерений и указанным списком имен полей.
| Аргумент | Напечатать | Описание |
|---|---|---|
|
|
|
Дополнительный массив размеров |
|
|
|
Необязательный массив имен полей |
Ничего.
При создании MWStruct объект имеет размерность 1 на 1 и не имеет полей. Initialize измеряет массив и добавляет набор именованных полей к каждому элементу. Каждый раз, когда вы звоните Initialize на том же объекте выполняется его переопределение. Если вы не поставляете varDims , существующее число и размер размеров массива неизменны. Если вы не поставляете varFieldNames , существующий список полей не изменяется. Запрос Initialize без аргументов оставляет массив неизменным.
Следующий код Visual 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третий элемент массива, осуществляющий линейную навигацию массива в порядке «основной столбец». Например, рассмотрим массив структур 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 объект.
| Аргумент | Напечатать | Описание |
|---|---|---|
|
|
|
Ссылка на неинициализированный |
Ничего
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