Классы и объекты
В VBA предусмотрены специальные процедуры-свойства, которые предназначены для чтения и записи закрытых свойств:
Property LetПроцедура записи позволяет присваивать свойству новые значения:
Property SetПроцедура записи позволяет присваивать свойству и свойству-ссылке новые значения. Отдельная процедура нужна, поскольку свойство-ссылка'указыва-ет на объект, а присваивание объектам отличается от присваивания переменным простых типов.
Property GetПроцедура чтения (а точнее функция) позволяет считывать значение свойства. Эта процедура применима как к простым свойствам, так и к свойствам-ссылкам.
Приведем синтаксис каждой из них:
[{Public | Private | Friend}] [Static] Property Let имяПроцедурыСвойства ([списокПараметров] значение) [блокОператоров1} [Exit Property] [блокОператоров2] End PropertyСинтаксис прост и понятен. Сначала идут операторы объявления видимости процедуры-свойства и необязательное ключевое слово static. Кстати, хотя использование ключевого слова private допустимо, его присутствие сводит на нет смысл процедуры-свойства.
ИмяПроцедурыСвойства – это имя процедуры, изменяющей свойство.
Совет
Желательно, чтобы имя повторялось во всех трех процедурах-свойствах, если они имеют дело с одним и тем же свойством.
СписокПараметров – это список дополнительных параметров, участвующих в процедуре. Синтаксис списка параметров абсолютно такой же, как и у списка в обыкновенной процедуре. Обратите внимание на то, что все три процедуры-свойства, имеющие одно и то же имя, обязаны иметь одинаковый список параметров.
Значение – это самый важный обязательный параметр, значение которого передается свойству.
Далее идет блокОператоров, в котором следует произвести присваивание свойству значения фактического параметра значение.
Процедура Property Set имеет следующий синтаксис.
[{Public | Private | Friend}] [Static] Property Set имяПроцедурыСвойства ([списокПараметров] ссылкаНаОбъект) [блокОператоров1] [Exit Property] [блокОператоров2] End PropertyЗдесь только одно отличие от предыдущей процедуры: вместо аргумента значение стоит аргумент ссылкаНаОбъект, который представляет имя ссылки на объект, присваиваемый свойству-ссылке.
Осталось рассмотреть функцию чтения значения свойства.
[{Public | Private | Friend}] [Static] Property Get имяПроцедурыСвойства ([списокПараметров]) As ТипДанных [блокОператоров1] [имяПроцедурыСвойства = выражение] [Exit Property] [блокОператоров2] End PropertyКак видно, Property Get – это функция, и для нее действуют все синтаксические правила функций. Напомним лишь одно: тип значения, возвращаемого функцией, должен совпадать с типом значения выражение.
Рассмотрим использование процедур-свойств на нашем примере класса Person. Поскольку мы объявили свойства класса name, birthday и male 3акрытыми, введем процедуры-свойства для работы с ними. В примере отображена только одна пара для свойства birthday, для name и male все строится аналогично.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Программа 20.27. Использование процедур-свойств.
Public Property Get prsDate() As DateprsDate = birthday End PropertyPublic Property Let prsDate(bthday As Date) If bthday > #1/1/19001 And bthday < # 1 / 1 / 20001 Thenbirthday = bthday ElseMsgBox("Incorrect date") End IfEnd Property