Типы данных, определяемые пользователем
Кроме встроенных типов данных, таких как Integer, Long и т.п.. Visual Basic поддерживает также типы данных, определяемые пользователем. Они могут быть созданы как на основе встроенных типов данных, так и на основе ранее определенных пользователем.
Для определения пользовательского типа данных используется ключевое слово Type:
[Private I Public] Type Имя_типа
Елеыент1 [([Размерность])] As Тип
[Елемент2 [([Размерность])] As Тип]
End Type
Определение общего (Public) собственного типа данных возможно только в секции (General) (Declarations) модуля. В этом случае этот тип будет доступен во всех процедурах всех форм, модулей и модулей классов. Для определения пользовательского типа данных в форме или модуле класса следует использовать ключевое слово Private, поскольку объявление общего типа в данной ситуации не допускается. При этом область видимости такого типа будет ограничена тем контейнером, где он объявлен.
Определив собственный тип данных, вы можете использовать его для объявления переменных этого типа. Эти переменные могут быть локальными, глобальными или переменными контейнера:
'(General)(Declarations) (Module) Type
usrGoodsTypeGoods
Num As Long
Name As String * 40
Price As Currency End Type
'(General)(Declarations) (Form)
Dim usrTools As usrGoodsType
Private Sub Commandl_Click ()
usrTools.Name = "Отвертка"
usrTools. Price =2.95
End Sub
В этом примере в секции объявлений модуля определяется глобальный тип данных usrGoodsType. Затем в секции объявлений формы объявляется доступная в контейнере переменная usrTools типа usrGoodsType, а конкретные значения составляющих этой переменной устанавливаются в процедуре commandl_click().
Доступ к элементам переменной пользовательского типа осуществляется, по аналогии с доступом к свойствам, путем указания точки после имени переменной. При этом переменные одинакового типа можно присваивать не поэлементно, а напрямую:
'(General)(Declarations) (Module) Type usrPerson
Name As usrName
Number As Integer
End Type
Public usrCustomer As usrPerson, usrSupplier As usrPerson
Private Sub Commandl_Click()
usrSupplier.Name = "Ilse"
usrSupplier.Number = 21873
usrCustomer = usrSupplier
End Sub
Переменные usrSupplier и u srCustomer относятся к одному типу usrPerson. Поэтому они присваиваться напрямую, а не поэлементно. Пользовательские типы данных могут быть составными. В этом случае важна оследовательность определения типов. Сначала нужно определить базисный тип, который будет использо ваться далее в составных типах. Если не соблюдать это правило, то после запуска программы появится сообщение об ошибке. Ниже приводится пример использования составных пользовательских типов данных:
' (General)(Declarations) (Module)
Type usrName
FirstName As String
Name As String * 40
End Type
'(General)(Declarations) (Module)
Private Type usrPerson
Name As usrName
BirthDate As Date
End Type
Dim usrCustomer As usrPerson
Private Sub Conimandl__Click ()
usrCustomer.Name.FirstName = "Rene"
usrCustomer.Name.Name = "Lampe"
End Sub
Данные пользовательского типа рекомендуется использовать при обработке данных неизменной структуры.