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