Класс MWStruct

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

Sub инициализируют ([varDims], [varFieldNames])

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

Параметры

АргументВводОписание

varDims

Variant

Дополнительный массив размерностей

varFieldNames

Variant

Дополнительный массив имен полей

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

'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

Элемент свойства ([i0], [i1]..., [i31]) как Мвфилд

Свойство 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, сопровождаемый именем поля, возвращает именованное поле на 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 как долго

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

Свойство NumberOfDims как долго

Свойство 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

Клон Sub (ppStruct как MWStruct)

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

Параметры

АргументВводОписание

ppStruct

MWStruct

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