Основы программирования. Динамические массивы. Списки. Ассоциативные массивы. Деревья. Хеш-таблицы - 10 стр.

UptoLike

Составители: 

12
begin
...
A.MyProp:=A.MyProp+1;
Здесь при использовании записи A.MyProp в правой части оператора при-
сваивания вызывается метод GetP, а в левойметод SetP. Таким образом, по-
следнее присваивание эквивалентно следующему:
A.SetP(A.GetP+1);
Отметим, что свойства нельзя передавать в подпрограмму по ссылке. Напри-
мер, следующая запись ошибочна: Inc(A.MyProp). Вместо нее следует исполь-
зовать приведенную выше
запись: A.MyProp:=A.MyProp+1. Причина проста:
при передаче параметра по ссылке в подпрограмму в действительности передает-
ся адрес переменной, а свойство напрямую не представляет объект в памяти и по-
этому не имеет адреса.
Отметим также, что свойства доступа на чтение и запись обычно являются
вспомогательными методами, и их принято помещать в закрытую
секцию класса.
Отметим также, что при описании свойств либо секция read, либо секция write
может отсутствовать. Соответственно мы получим свойства с доступом только на
запись или только на чтение. Наконец, если при доступе к полю не требуется про-
водить никаких дополнительных действий, то при описании свойства вместо со-
ответствующего метода можно
указать имя поля, например:
property MyProp: integer read p write SetP;
В подавляющем большинстве случаев доступ на чтение не требует дополнитель-
ных действий, поэтому последняя форма описания свойствсамая распростра-
ненная.
Дополнительные действия могут проводиться как в начале, так и в конце ме-
тода. Обычно в начале метода доступа на запись перед присваиванием закрытому
полю производится контроль входного параметра на принадлежность к заданному
диапазону и в случае его несоответствия диапазону может либо генерироваться
исключение, либо параметр автоматически исправляется для соответствия диапа-
зону. Например:
procedure MyClass.SetP(pp: integer);
begin
if pp<0 then pp:=0;
if p<>pp then
p:=pp;
end;
Если класс представляет объект, отображаемый на экране, а свойствоего
визуальный параметр, то в
конце метода после присваивания закрытому полю
выполняются действия по перерисовке объекта, например:
type