Visual Basic 6. Руководство разработчика


Использование модуля класса


Реализуем этот же проект, но с использованием модуля класса. Модуль класса полностью скрывает детали реализации. Он предоставляет через свой интерфейс некоторые функциональные возможности, и разработчику больше не нужно просматривать или редактировать его исходный программный код.

Предупреждение

При попытке открыть проекты примеров с компакт-диска (или из папки диска, куда они были скопированы), появится сообщение об ошибке, означающее, что проект ссылается на компонент, который недоступен. Каждый проект из этой главы создает новый класс, который неизвестен системе. Проигнорируйте это сообщение, откройте проект и добавьте к нему ссылку на класс.

Сохраните существующий проект и начните новый (это будет проект CTIMER из папки для этой главы на компакт-диске). Чтобы создать новый класс сделайте следующее:

1. В диалоговом окне New Project выберите ActiveX DLL. Visual Basic добавит папку Class Modules в окно Project Explorer, а в нее - модуль класса. Модуль класса называется по умолчанию Class 1. Проект ActiveX DLL не имеет форм.

2.  Измените свойство Name модуля класса на CTimer.

3.  Для нового компонента будет отображено окно Code, так как модуль класса не        имеет визуального интерфейса.

4. Введите строки программного кода 15.3 в окно Code модуля классов.

Программа 15.3. Код класса CTimer

Dim totallnterval As Double

Dim Tl As Double

Public Sub StartCounting ()

Tl = Time



End Sub

Public Sub StopCounting()

totallnterval = totallnterval + Time - Tl

End Sub

Property Get ElapsedTime () As Double

ElapsedTime = totallnterval

End Property

Public Sub ResetTimer()

totallnterval - 0

End Sub

Содержимое модуля классов очень напоминает содержимое обычного модуля, но не имеет общедоступных переменных. Переменная totallnterval не должна быть доступной из какой-либо процедуры за пределами модуля класса. Ее значение может быть прочитано только с использованием процедуры ElapsedTime(). Необходимо отметить, что это специальный тип процедуры, называемый Property Get (Получить свойство). Каждый раз, когда приложение пытается прочитать значение переменной totallnterval, вызывается процедура ElapsedTime(). Ее код считывает значение локальной переменной totallnterval


и назначает его процедуре ElapsedTime(). Затем это значение передается в вызывающее приложение.

Когда приложение пытается установить значение свойства, вызывается похожая процедура

Property Let (Установить свойство).

Рассматриваемый класс не имеет свойств, которые можно установить таким образом, и в нем нет процедур Property Let. Обе процедуры (Property Let и Property Get) обсуждаются далее после рассмот­рения небольшого примера. Они действуют подобно буферам обмена между классом и приложением, которое его использует. Поэтому приложение не может установить значение свойства непосредственно.

Примечание

Класс CTimer не предоставляет процедуру Property Let для свойства totallnterval. Как результат, это свойство доступно только для чтения.

Методы модуля класса идентичны методам модуля. Добавление метода к классу является таким же простым, как объявление общедоступной функции или процедуры. Любая процедура может стать методом класса, если она определена в модуле класса и объявлена как Public.

Примечание

Некоторые члены класса могут быть реализованы как методы или как свойства, и не всегда легко сказать, какой путь выбрать. К счастью, это не является настолько важным. Необходимо пытаться придерживаться парадигмы встроенных элементов управления или элементов управления "от третьего лица". Например, если класс явля­ется элементом управления ActiveX, то член, который хотелось бы видеть в окне Properties, должен быть реализован как свойство (обратное верно не всегда). Методы должны соответствовать действиям, а свойства — атрибутам. Схема наименований также важна. Имя, имеющее вид GetElapsedTime, наводит на мысль о методе, а имя ElapsedTime - ближе к свойству.


Содержание раздела