Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Visual Basic и Visual Basic for Applications.doc
Скачиваний:
175
Добавлен:
01.05.2014
Размер:
579.07 Кб
Скачать

3.2. Модули классов и стандартные модули

Классы отличаются от стандартных модулей (СМ) способом хранения их данных. Никогда не существует более одной копии данных СМ. Данные моду­ля класса (МК) существуют отдельно для каждого экземпляра (объекта) класса. Данные СМ имеют область видимости уровня программы (существуют весь период работы программы). Данные МК существуют только во время су­ществования объекта. Переменные, объявленные Public в СМ, видимы отов­сюду в проекте, а в МК доступны только если имеется объектная перемен­ная, содержащая ссылку на конкретный экземпляр класса.

Все это касается и процедур Public в СМ и МК.

Истинные статические данные класса в модуле класса VB реализовать нельзя. Однако, если потребуется, чтобы некоторые элементы данных сов­местно использовались всеми объектами, созданными из модуля класса, то это можно смоделировать, используя процедуры Poperty для получения зна­чения члена набора данных Public в стандартном модуле. Использовать слово Static в модуле класса нельзя.

Свойства и методы класса формируют его умолчительный интерфейс.

Для определения свойства класса можно добавить к модулю класса пе­ременные Public. Также можно создать переменные Private внутри модуля класса.

Процедуры свойств Property используются, когда: 1) свойство дос­тупно только для чтения или, будучи однажды установленным, не должно меняться, 2) свойство имеет жесткий набор или интервал значений, кото­рые надо проверять, 3) установка свойства должно обусловить заметное изменение в состоянии объекта, 4) установка свойства обусловливает из­менения других внутренних переменных или значений других свойств.

Типы процедур-свойств:

Property Get - возвращает значение свойства

Property Let - устанавливает значение свойства

Property Set - устанавливает значение объектного свойства (свойс­тва, содержащего ссылку на объект).

Примеры:

  1. присваивание значения свойству

Public Property Let Property_Name (ByVal vNewValue As Variant)

mVariable = vNewValue

End Property

  1. считывание значения свойства (аналогично использованию обычной функции)

Public Property Get Property_Name () As Variant

Property_Name = mVariable

End Property

  1. передача ссылки на объект (но не значения свойства как у Let)

Public Property Set Property_Name (ByVal objNewValue As Object)

Set Property_Name = objNewValue

End Property

Другая возможность определения свойств в модуле класса состоит в том, что в секции объявлений класса определяется общая переменная Public Property_Name As Variant, которая может рассматриваться как свойство класса. Простые Public-переменные не могут быть объявлены в контейнере класса (Form и Class), их можно объявить только в модуле.

Методы класса - это public пользовательские процедуры Sub и Function. Все подпрограммы по умолчанию public. При этом имя процедуры или имя функции является именем метода.

3.3. Управление событиями объекта

Событие объявляется в разделе Declaration модуля класса ключевым словом Event. Событие может иметь параметры ByVal и ByRef:

Option Explicit

Public Event PercentDone(ByVai Percent As Single, ByRef Cancel As Boolen).

Событие PercentDone устанавливается процедурой (методом) LongTask класса Widget, который требует два параметра: отрезок времени работы задачи и минимальный интервал времени, через который метод должен ини­циировать событие PercentDone.

Когда объект получает событие PercentDone, параметр Percent содер­жит процент завершения задачи. Параметр ByRef Cancel можно установить в True, чтобы отменить метод, который устанавливал событие. События не имеют возвращаемых значений, не могут иметь именованных и необязатель­ных параметров.

Для генерации события внутри класса используется оператор RaiseEvent, которму в качестве аргумента передается имя события: RaiseEvent Event_Name.

Для управления событиями можно объявить переменную класса этого объекта в разделе Declaration модуля формы, используя ключевое слово WithEvents

Private WithEvents mW As Widget

Для подключения переменной WithEvents к объекту надо ей присвоить ссылку на объект Set mW = New Widget

Для завершения управления событиями нужно установить mW в Nothing

Set mW = Nothing

Для того, чтобы переменная mW представляла свойство Form1, ее надо объявить не как private, а как public.

Кроме событий, определяемых пользователем, классы всегда содержат события Initialize (первое использование объекта) и Terminate (уничтожение всех ссылок на объект), которые аналогичны событиям формы Load и Unload.