Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
153
Добавлен:
02.05.2014
Размер:
1.63 Mб
Скачать

3.3.5. Пользовательские типы данных

Объединяя переменные нескольких различных типов, можно создавать пользовательские типы данных.

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

Пользовательский тип создается инструкцией Type, которая должна быть помещена в раздел Описания модуля. Пользовательские типы данных с соответствую­щим ключевым словом могут быть объявлены как Private или Public. Например:

Private Type DataTypel

или

Public Type DataType2

В примере ниже создается пользовательский тип, предназначенный для хранения инфор­мации относительно компьютерной системы:

' Объявление в разделе Описания

Private Type SystemInfo

CPU As Variant

Memory As Long

Disk As Long

VideoColor As Integer

Cena As Currency

MadeDate As Variant

End Type

Объявление переменных пользовательского типа. Переменные одного пользовательского типа можно объявлять как локальные, уровня моду­ля private или уровня модуля public:

Dim MySystem As SystemInfo, YourSystem As SystemInfo

В следующей таблице иллюстрируется, где и с какой областью определения можно объявлять пользовательские типы и переменные этих типов:

Процедура /

модуль

Можно создать

пользо­вательский

тип как...

Переменные

пользовательского

типа могут быть

объявлены ...

Процедуры

Нельзя

Только локально

Стандартные модули

Private или Public

Private или Public

Модули форм и отчетов

Только Private

Только Private

Модули классов

Только Private

Только Private

Присвоение и получение значений. Присвоение и отбор значений из элементов таких переменных выполняется аналогично установке и получению значений свойств объектов:

MySystem.CPU = "485"

If MySystem.MadeDate < #1/1/95# Then

Одну переменную можно также присвоить другой, если обе они — одного пользовательского типа. При этом значения всех элементов одной переменной присваиваются соответствую­щим элементам другой переменной.

YourSystem = MySystem

Пользовательские типы, содержащие массивы. Пользовательский тип может содержать обычный массив (фиксированного размера). На­пример:

Type SystemInfo

CPU As Variant

Memory As Long

DiskDrives (5) As String ' Массив фиксированного размера

VideoColor As Integer

Cena As Currency

MadeDate As Variant

End Type

Он может также содержать динамический массив:

Type SystemInfo

CPU As Variant

Memory As Long

DiskDrivesO As String ' Динамический массив

VideoColor As Integer

Cena As Currency

MadeDate As Variant

End Type

Обращение к значениям массива внутри пользовательского типа выполняется аналогично обращению к свойству объекта:

Dim MySystem As SystemInfo

ReDim MySystem.DiskDrives (3)

MySystem.DiskDrives(0) = 1.44 MB"

Можно также объявить массив пользовательских типов:

Dim AllSystems(100) As SystemInfo

Следуя тем же правилам, можно обратиться к компонентам такой структуры данных:

AllSystems(5).CPU = "485DX"

AllSystems(5).DiskDrives(2) = "530M SCSI"

Передача пользовательских типов в процедуры. Переменные пользовательского типа можно использовать в качестве параметров и значе­ний процедур — можно либо возвращать пользовательские типы из функций, либо переда­вать переменную пользовательского типа в процедуру как параметр. Пользовательские типы всегда передаются по ссылке, так что процедура может изменять параметр и возвра­щать его в вызывающую процедуру, как иллюстрируется в следующем примере:

Sub FillSystem (System1 As SystemInfo)

Sysiem1.CPU = ПолеПроцессор.Text

System1.Memory = ПолеПамять.Text

Sysiem1.Cena = ПолеЦена.Text

System1 .MadeDate = Now

End Sub

Если требуется передать пользовательский тип в модуле класса или формы, процедура должна быть private.

Пользовательские типы, содержащие объекты. Пользовательские типы могут также содержать объекты:

Private Type SchetVvod

frmInput as Form

dbSchet as Database

End Type

Вложение структур данных. С помощью вложения структур можно организовывать иерархии данных. Пользовательские типы могут содержать другие пользовательские типы. Чтобы текст кода был более читабельным и простым в отладке, нужно стараться весь код, который определяет пользовательские типы данных, размещать в одном модуле.

Соседние файлы в предмете Базы данных