Инструкция Structure

Обновлен: Ноябрь 2007

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

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

Компоненты

  • attributelist
    Необязательно. См. Список атрибутов.

  • accessmodifier
    Необязательно. Может быть одним из следующих.

    См. раздел Уровни доступа в Visual Basic.

  • Shadows
    Необязательно. См. раздел Shadows.

  • Partial
    Необязательно. Показывает частичное определение структуры. См. раздел Partial (Visual Basic).

  • name
    Обязательно. Имя данной структуры. См. раздел Имена объявленных элементов.

  • Of
    Необязательно. Указывает на то, что это общая структура.

  • typelist
    Является обязательным, если используется ключевое слово Of. Список параметров типа для данной структуры. См. раздел список типов.

  • Implements
    Необязательно. Указывает на то, что эта структура реализует члены одного или нескольких интерфейсов. См. раздел Оператор Implements.

  • interfacenames
    Является обязательным, если используется оператор Implements. Имена интерфейсов, реализуемых структурой.

  • datamemberdeclarations
    Обязательно. Один или несколько операторов Const, Dim, Enum или Event объявляют данные-члены структуры.

  • methodmemberdeclarations
    Необязательно. Более одного объявления процедур Function, OperatorProperty или Sub, которые выступают в качестве членов-методов структуры.

  • End Structure
    Обязательно. Завершает определение Structure.

Заметки

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

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

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

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

Правила

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

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

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

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

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

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

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

  • Свойство по умолчанию. Структура может определять максимум одно свойство в качестве свойства по умолчанию с помощью модификатора Default (Visual Basic). Дополнительные сведения см. в разделе Свойства, используемые по умолчанию.

Поведение

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

  • Область действия. Область действия структуры — ее пространство имен, класс, структура или модуль.

    Областью действия каждого члена структуры является вся структура.

  • Время существования. Для самой структуры не определено время существования. Вместо этого каждый экземпляр данной структуры имеет время существования, независимое от всех других экземпляров.

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

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

    У членов структуры время существования зависит от того, как и где они были объявлены. Дополнительные сведения содержатся в разделе "Время жизни" в Оператор Class (Visual Basic).

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

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

См. также

Задачи

Практическое руководство. Преобразование пользовательского типа в структуру Visual Basic

Основные понятия

Структуры и классы

Рекомендации по обновлению. Необходимость избегать использования массивов и строк заданной длины в пользовательских типах

Ссылки

Оператор Class (Visual Basic)

Оператор Interface (Visual Basic)

Оператор Module

Оператор Dim (Visual Basic)

Оператор Const (Visual Basic)

Оператор Enum (Visual Basic)

Оператор Event

Оператор Operator

Оператор Property