Поделиться через


Оператор структуры

Объявляет имя структуры и вводит определение переменных, свойств, событий и процедур, составляющих структуру.

Синтаксис

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
    [ datamemberdeclarations ]
    [ methodmemberdeclarations ]
End Structure

Комплектующие

Срок Определение
attributelist Необязательно. См. список атрибутов.
accessmodifier Необязательно. Может быть одним из следующих вариантов:

- Общественный
- Защищенный
- Друг
- Частный
- Защищенный друг
- Закрытый защищенный

См. сведения о уровнях доступа в Visual Basic.
Shadows Необязательно. См. тени.
Partial Необязательно. Указывает частичное определение структуры. См. раздел "Частичный".
name Обязательное. Имя этой структуры. См. объявленные имена элементов.
Of Необязательно. Указывает, что это универсальная структура.
typelist Требуется, если используется ключевое слово Of . Список параметров типа для этой структуры. См. список типов.
Implements Необязательно. Указывает, что эта структура реализует элементы одного или нескольких интерфейсов. См. инструкцию "Реализация".
interfacenames Требуется, если вы используете инструкцию Implements . Имена интерфейсов, реализуемых этой структурой.
datamemberdeclarations Обязательное. Ноль или более Const, EnumDimили Event операторы, объявляющие элементы данных структуры.
methodmemberdeclarations Необязательно. Ноль или больше объявлений Function, OperatorPropertySub или процедур, которые служат элементами метода структуры.
End Structure Обязательное. Structure Завершает определение.

Замечания

Инструкция Structure определяет составной тип значения, который можно настроить. Структура — это обобщение определяемого пользователем типа (UDT) предыдущих версий Visual Basic. Дополнительные сведения см. в разделе "Структуры".

Структуры поддерживают многие из этих же функций, что и классы. Например, структуры могут иметь свойства и процедуры, они могут реализовывать интерфейсы, и они могут иметь параметризованные конструкторы. Однако существуют значительные различия между структурами и классами в таких областях, как наследование, объявления и использование. Кроме того, классы являются ссылочными типами и структурами — это типы значений. Дополнительные сведения см. в разделе "Структуры и классы".

Можно использовать Structure только на уровне пространства имен или модуля. Это означает, что контекст объявления для структуры должен быть исходным файлом, пространством имен, классом, структурой, модулем или интерфейсом и не может быть процедурой или блоком. Дополнительные сведения см. в разделе "Контексты объявления" и "Уровни доступа по умолчанию".

Структура по умолчанию используется для доступа "Друг ". Уровни доступа можно настроить с помощью модификаторов доступа. Дополнительные сведения см. в разделе "Уровни доступа" в Visual Basic.

Правила

  • Вложенность. Можно определить одну структуру внутри другой. Внешняя структура называется содержащей структурой, а внутренняя структура называется вложенной структурой. Однако доступ к элементам вложенной структуры невозможно получить через содержащую структуру. Вместо этого необходимо объявить переменную типа данных вложенной структуры.

  • Объявление члена. Необходимо объявить каждый элемент структуры. Элемент структуры не может быть защищен или Protected Friend потому, что ничего не может наследовать от структуры. Однако сама структура может быть Protected или Protected Friend.

    Вы можете объявить нулевые или несколько не общих переменных или не общих, ненакусных событий в структуре. Не удается использовать только константы, свойства и процедуры, даже если некоторые из них не являются общими.

  • Инициализация. Вы не можете инициализировать значение какого-либо члена не общих данных структуры в рамках его объявления. Необходимо либо инициализировать такой элемент данных с помощью параметризованного конструктора структуры, либо назначить значение члену после создания экземпляра структуры.

  • Наследование. Структура не может наследоваться от любого типа, отличного ValueTypeот типа, от которого наследуются все структуры. В частности, одна структура не может наследоваться от другой.

    Оператор "Наследование" нельзя использовать в определении структуры, даже для указанияValueType.

  • Внедрение. Если структура использует оператор Implements, необходимо реализовать каждый элемент, определенный каждым интерфейсом, указанным в interfacenames.

  • Свойство по умолчанию. Структура может указать не более одного свойства в качестве свойства по умолчанию с помощью модификатора по умолчанию . Дополнительные сведения см. в разделе "По умолчанию".

Поведение

  • Уровень доступа. В структуре можно объявить каждый элемент с собственным уровнем доступа. Все члены структуры по умолчанию являются общедоступными . Обратите внимание, что если сама структура имеет более ограниченный уровень доступа, это автоматически ограничивает доступ к его членам, даже если изменить их уровни доступа с помощью модификаторов доступа.

  • Область. Структура находится в области, содержащей пространство имен, класс, структуру или модуль.

    Область каждого элемента структуры — это вся структура.

  • Продолжительность жизни. Структура сама по себе не имеет времени существования. Скорее, каждый экземпляр этой структуры имеет время существования независимо от всех остальных экземпляров.

    Время существования экземпляра начинается при создании предложения New Operator . Он заканчивается, когда время существования переменной, в которой она заканчивается.

    Невозможно продлить время существования экземпляра структуры. Приближение к статическому функциональность структуры предоставляется модулем. Дополнительные сведения см. в инструкции модуля.

    Элементы структуры имеют время существования в зависимости от того, как и где они объявлены. Дополнительные сведения см. в разделе "Время существования" в операторе класса.

  • Квалификация. Код за пределами структуры должен указать имя члена с именем этой структуры.

    Если код внутри вложенной структуры делает неквалифицированную ссылку на элемент программирования, Visual Basic выполняет поиск элемента сначала в вложенной структуре, а затем в содержащейся структуре и т. д. до самого внешнего содержащего элемента. Дополнительные сведения см. в разделе "Ссылки на объявленные элементы".

  • Потребление памяти. Как и во всех составных типах данных, вы не можете безопасно вычислить общее потребление памяти структуры, добавив вместе номинальное выделение хранилища его членов. Кроме того, вы не можете безопасно предположить, что порядок хранения в памяти совпадает с порядком объявления. Если необходимо управлять макетом хранилища структуры, можно применить StructLayoutAttribute атрибут к инструкции Structure .

Пример

В следующем примере инструкция используется Structure для определения набора связанных данных для сотрудника. Он показывает использование Publicэлементов данных Friendи Private элементов для отражения конфиденциальности элементов данных. В нем также показаны процедуры, свойства и элементы событий.

Public Structure employee
    ' Public members, accessible from throughout declaration region.
    Public firstName As String
    Public middleName As String
    Public lastName As String
    ' Friend members, accessible from anywhere within the same assembly.
    Friend employeeNumber As Integer
    Friend workPhone As Long
    ' Private members, accessible only from within the structure itself.
    Private homePhone As Long
    Private level As Integer
    Private salary As Double
    Private bonus As Double
    ' Procedure member, which can access structure's private members.
    Friend Sub CalculateBonus(ByVal rate As Single)
        bonus = salary * CDbl(rate)
    End Sub
    ' Property member to return employee's eligibility.
    Friend ReadOnly Property Eligible() As Boolean
        Get
            Return level >= 25
        End Get
    End Property
    ' Event member, raised when business phone number has changed.
    Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure

Дополнительные сведения об использовании Structures см. в разделе "Переменная структуры".

См. также