9.2.4. Свойства
Свойства - это специальный механизм
классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных
СЛОВ property, read И write (слова read И write считаются зарезервированньши
только в контексте объявления свойства). Обычно свойство связано с некоторым
полем и указывает те методы класса, которые должны использоваться при записи
в это поле или при чтении из него. Например:
type
TaClass
=
class
IntField: Integer; Function
GetField: Integer;
Procedure
SetField
(Value: Integers);
Property
IntegerValue:
Integer
read
GetField
write
SetField;
end
;
В контексте программы свойство ведет
себя как обычное поле. Например, мы могли бы написать такие операторы:
var
aClass: TaClass;
Value: Integer;
begin
aClass := TaClass.Create;
{ Обязательное обращение
к
конструктору перед
обращением к полю или свойству!}
aClass.IntegerValue := 0;
Value := aClass.IntegerValue;
aClass.Destroy; //
Удаление
ненужного объекта
end;
Более того, возможен и такой оператор
присваивания:
aClass.IntField := NewValue;
Разница между этим оператором и оператором
aClass.IntegerValue := NewValue;
заключается в том, что при обращении
к свойству автоматически подключается метод setFieid, в котором могут реализовываться
специфичные действия. Вспомним использовавшийся нами в учебной программе оператор
IbOutput.Caption := 'Строка';
Свойство Caption компонента Label
вызывает метод setText, который не только запоминает строку символов во внутренней
переменной, но и осуществляет прорисовку метки с новым текстом.
Если нет необходимости в специальных
действиях при чтении или записи свойства, вместо имени соответствующего метода
можно указывать имя поля:
type
TaClass =
class
IntFiled:
Integer;
Procedure
SetFieid
(Value: Integers;
Property
IntegerValue:
Integer
read
IntFiled
write
SetFieid;
end;
Если необходимо, чтобы свойство было
доступно только для чтения или только для записи, следует опустить соответственно
часть write или read. Вообще говоря, свойство может и не связываться с
полем. Фактически оно описывает один
или два метода, которые осуществляют некоторые действия над данными того же
типа, что и свойство.
include $_SERVER["DOCUMENT_ROOT"]."/cgi-bin/footer.php"; ?>