Шаг 69 - Инструкция Type

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

[Private | Public] Type имяПеременной
	 имяЭлемента [([индексы])] As тип
	[имяЭлемента [([индексы])] As тип]
	. . .
End Type

Параметры
Public
Необязательный. Используется для описания определяемых пользователем типов, которые доступны для всех процедур во всех модулях всех проектов.
Private
Необязательный. Используется для описания определяемых пользователем типов, которые доступны только в модуле, в котором выполняется описание.
имяПеременной
Обязательный. Имя типа, определяемого пользователем, удовлетворяющее правилам именования переменных.
имяЭлемента
Обязательный. Имя элемента определяемого пользователем типа. Имена элементов также должны соответствовать правилам именования переменных, за исключением того, что для их задания разрешается использовать ключевые слова.
индексы Необязательный. Размерности элемента, являющегося массивом. Для задания массива, размеры которого могут изменяться, указываются только скобки. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
тип
Обязательный. Тип данных элемента; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String(для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, другой определяемый пользователем тип или объектный тип.

Замечания
Инструкция Type допускает использование только на уровне модуля. После определения типа данных с помощью инструкции Type имеется возможность в любом месте описать переменную этого типа в заданной области определения. Для описания переменной определяемого пользователем типа используются инструкции Dim, Private, Public, ReDim или Static.
В стандартных модулях типы данных, определяемые пользователем, по умолчанию являются общими. Видимость этих типов данных может быть изменена с помощью ключевого слова Private. В модулях класса, однако, типы данных, определяемые пользователем, могут быть только личными, и их видимость не может быть изменена с помощью ключевого слова Public.
Не допускается появление номеров строк и меток строк в блоках Type...End Type.
Типы данных, определяемые пользователями, могут использоваться с записями данных, которые часто состоят из набора связанных элементов различного типа.
В следующем примере демонстрируется использование массивов фиксированного размера в типах данных, определяемых пользователем:

Type StateData
	CityCode (1 To 100) As Integer	' Описывает статический массив.
	County As String * 30
End Type

Dim Washington(1 To 100) As StateData

В предыдущем примере StateData включает статический массив CityCode, а запись Washington имеет одинаковую со StateData структуру.
При описании массива фиксированного размера с типом, определяемым пользователем, его размерности должны описываться с помощью числовых литералов или констант, а не с помощью переменных.
Значение, задаваемое в инструкции Option Base, определяет нижнюю границу индексов для массивов, содержащихся в типах данных, определяемых пользователем.

Пример
В данном примере инструкция Type используется для определения типа данных. Инструкция Type используется только на уровне модуля. При появлении в модуле класса инструкции Type должно предшествовать ключевое слово Private.

Type EmployeeRecord	' Тип, определенный пользователем.
	ID As Integer	' Элементы типа данных.
	Name As String * 20
	Address As String * 30
	Phone As Long
	HireDate As Date
End Type
Sub CreateRecord()
	Dim MyRecord As EmployeeRecord	' Объявляет переменную.

' Присвоение значений элементам переменной EmployeeRecord
' должно выполняться в процедуре.
	MyRecord.ID = 12003	' Присваивает значение элементу.
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.