Инструкция Structure
Обновлен: Ноябрь 2007
Объявляет имя структуры и представляет определения переменных, свойств, событий и процедур, которые объединены в структуру.
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
datamemberdeclarations
[ methodmemberdeclarations ]
End Structure
Компоненты
attributelist
Необязательно. См. Список атрибутов.accessmodifier
Необязательно. Может быть одним из следующих.Protected Friend
См. раздел Уровни доступа в 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