Оператор 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 , Enum Dim или Event операторы, объявляющие элементы данных структуры. |
methodmemberdeclarations |
Необязательно. Ноль или больше объявлений Function , Operator Property Sub или процедур, которые служат элементами метода структуры. |
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
Дополнительные сведения об использовании Structure
s см. в разделе "Переменная структуры".