Основы офисного программирования и язык VBA


Классы, как упаковка


К классу Rational, создание которого еще не закончено, мы еще вернемся. Пока же продолжим разговор о процедурах - свойствах, поскольку они являются важными компонентами класса. В этом разделе пойдет речь об одном из их довольно неожиданных применений, когда они позволяют выступать классу в роли привлекательной упаковки внутренних и служебных функций. Но обо всем по порядку.

Построим класс Plan, в котором по существу есть только одно свойство, хранящее текущий месяц. Хранится это свойство, как целое, но для внешнего мира оно выглядит как обычное имя месяца. Вот как это реализовано.

'Класс Plan 'Свойство класса Private CurMonth As Integer 'Закрытый массив, играющий служебную роль Private Месяцы(1 To 12) As String

Private Sub Class_Initialize() CurMonth = Month(Now)

Месяцы(1) = "Январь": Месяцы(2) = "Февраль": Месяцы(3) = "Март" Месяцы(4) = "Апрель": Месяцы(5) = "Май": Месяцы(6) = "Июнь" Месяцы(7) = "Июль": Месяцы(8) = "Август": Месяцы(9) = "Сентябрь" Месяцы(10) = "Октябрь": Месяцы(11) = "Ноябрь": Месяцы(12) = "Декабрь" End Sub

Public Property Get ТекущийМесяц() As String ТекущийМесяц = Месяцы(CurMonth) End Property

Public Property Let ТекущийМесяц(ByVal NewValue As String) Dim i As Byte i = 1 Do While i <= 12 If Месяцы(i) = NewValue Then CurMonth = i Exit Do End If i = i + 1 Loop If i = 13 Then 'Неверно задан месяц CurMonth = Month(Now) End If End Property

Пример 4.3.

Обратите внимание, работу с закрытым свойством CurMonth обеспечивают процедуры - свойства Property Let ТекущийМесяц и Property Get ТекущийМесяц. С их помощью можно читать и изменять значение свойства CurMonth. Одновременно Let и Get занимаются преобразованием данных, что является распространенной практикой. Пример этот интересен и с позиций построения конструктора по умолчанию, который выполняет все необходимые внутренние инициализации, в данном случае, задавая значение массиву Месяцы.




Начало  Назад  Вперед



Книжный магазин