Оператор Structure

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

Синтаксис

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

Детали

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

- Открытый
- Protected
- Friend
- Частное
- Protected Friend
- Private Protected

См. раздел Access levels in Visual Basic.
Shadows Необязательно. См . тени.
Partial Необязательно. Указывает частичное определение структуры. См . раздел "Частичный".
name Обязательный. Имя этой структуры. См. раздел Declared Element Names.
Of Необязательно. Указывает, что это универсальная структура.
typelist Требуется, если вы используете ключевое слово. Список параметров типа для этой структуры. См . список типов.
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 выполняет поиск элемента сначала в вложенной структуре, а затем в содержащейся структуре и т. д. до самого внешнего содержащего элемента. Для получения дополнительной информации см. References to Declared Elements.

  • Потребление памяти. Как и во всех составных типах данных, вы не можете безопасно вычислить общее потребление памяти структуры, добавив вместе номинальное выделение хранилища его членов. Кроме того, вы не можете безопасно предположить, что порядок хранения в памяти совпадает с порядком объявления. Если необходимо управлять макетом хранилища структуры, можно применить 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 см. в разделе "Переменная структуры".

См. также