exponenta event banner

Класс MWStruct

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

Sub Initialize ([varDims], [varStartNames])

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

Параметры

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

varDims

Variant

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

varFieldNames

Variant

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

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

Ничего.

Замечания

При создании 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

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

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третий элемент массива, осуществляющий линейную навигацию массива в порядке «основной столбец». Например, рассмотрим массив структур 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

Субклон (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