Класс MWStruct

The MWStruct класс проходит или получает Struct введите в скомпилированный метод класса или из него. Этот класс содержит семь свойств/методов:

Подинициализация ([varDims], [varFieldNames])

Этот метод назначает массив структур с заданным количеством и размером размерностей и заданным списком имен полей.

Параметры

АргументНапечататьОписание

varDims

Variant

Необязательный массив размерностей

varFieldNames

Variant

Необязательный массив имен полей

Возвращаемое значение

Ничего.

Замечания

Когда создается, MWStruct объект имеет размерность 1 на 1 и без полей. The 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

Элемент свойства ([i0], [i1],..., [i31]) Как MWField

The Item свойство является свойством по умолчанию MWStruct класс. Это свойство используется, чтобы задать/получить значение поля с конкретным индексом в массиве структур.

Параметры

АргументНапечататьОписание

i0, i1..., i31

Variant

Необязательные аргументы в виде индексов. Можно ввести от 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 после чего имя поля возвращает именованное поле на nth-й элемент массива, перемещающийся по массиву линейно в основном порядке столбцов. Например, рассмотрим массив структур 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)
    
  • Имена полей учитываются в регистре.

Номер свойства OfFields как длинный

Доступная только для чтения NumberOfFields свойство возвращает количество полей в массиве структур.

Количество свойств OfDims как длинное

Доступная только для чтения NumberOfDims свойство возвращает количество размерностей в массиве структур.

Свойства Dims как вариант

Доступная только для чтения Dims свойство возвращает массив длины NumberOfDims который содержит размер каждой размерности массива структур.

Свойство FieldNames как вариант

Доступная только для чтения 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

Подклон (ppStruct As MWStruct

)

Создание копии MWStruct объект.

Параметры

АргументНапечататьОписание

ppStruct

MWStruct

Ссылка на неинициализированный 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