Классы и объекты
В 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 все строится аналогично.
Программа 20.27. Использование процедур-свойств.
Public
Property
Get
prsDate()
As
Date
prsDate = birthday
End
Property
Public
Property
Let
prsDate(bthday
As
Date
)
If
bthday > #1/1/19001
And
bthday < # 1 / 1 / 20001
Then
birthday = bthday
Else
MsgBox(
"Incorrect date"
)
End
If
End
Property