Как создаются процедуры- свойства
В классе Rational есть два закрытых свойства, заданных переменными m и n и определяющими соответственно числитель и знаменатель дроби, представляющей рациональное число. Зададим для каждого из этих свойств пару Property Let - Property Get с именами Числитель и Знаменатель соответственно. Для создания процедур - свойств обычной практикой является использование заготовок, создаваемых автоматически. Выбрав в Редакторе Visual Basic пункт меню Insert | Procedure, мы задали в появившемся диалоговом окне Add Procedure значение Property для типа процедуры. Задав еще имя процедуры - свойства "Числитель", и, щелкнув OK, мы получили две стандартные заготовки Property Let и Property Get.
Рис. 4.3. Создание процедур - свойств
Повторив эти действия, мы получили вторую пару заготовок с именем "Знаменатель". Заготовки затем наполняются, как обычно, содержанием и слегка модифицируются. В заготовках предусмотрен общий тип Variant для параметра в Property Let и возвращаемого значения в Property Get. Разумно изменить этот общий тип на конкретный тип, используемый в данной ситуации. Естественно, что иногда приходится заменить Let на Set или руками добавить еще одну заготовку для Set. Приведем тексты этих процедур для класса Rational после их модификации и заполнения:
Public Property Get Числитель() As Integer Числитель = m End Property
Public Property Let Числитель(ByVal NewValue As Integer) CreateRational NewValue, n End Property
Public Property Get Знаменатель() As Integer Знаменатель = n End Property
Public Property Let Знаменатель(ByVal NewValue As Integer) CreateRational m, NewValue End Property
Обратите внимание, для задания новых значений свойств в процедурах Let Числитель и Let Знаменатель мы вызываем конструктор, который может изменить нужным образом и числитель и знаменатель.
Замечание:
Для класса Rational доступ к свойствам Числитель и Знаменатель следовало бы закрыть полностью. Рациональные числа представляются для пользователей неделимыми и их внутренняя структура должна быть недоступной. Для них следовало бы использовать пятую стратегию работы со свойствами, когда свойства Let и Get не объявляются. Причину, по которой были введены эти процедуры - свойства, мы объясним позже, когда речь пойдет о реализации методов класса.
Процедуры - свойства Property Let, Property Set, Property Get играют важную роль в определении большинства классов. Поэтому имеет смысл разобрать их точный синтаксис.