Совокупность данных и методов их чтения и записи называется свойством. Свойства объектов можно устанавливать в процессе проектирования, а также можно изменять программно во время выполнения программы. В процессе проектирования приложения в среде программирования Delphi можно просматривать значения некоторых из этих данных в окне Инспектора объектов и изменять эти значения
Свойства внешне напоминают поля класса, но на самом деле представляют собой механизм, регулирующий доступ к полям. Как правило, свойство связано с некоторым полем класса и указывает те методы класса, которые должны быть использованы при чтении из этого поля либо при записи в него. Если определен метод доступа для чтения, то он должен быть функцией без параметров, которая возвращает значение того же самого типа, что и свойство. Имя функции, предназначенной для чтения, принято начинать с приставки Get, после которой следует имя свойства. Метод, используемый для записи, должен быть процедурой, имеющей один параметр. Этот параметр должен быть того же типа, что и свойство. Имя процедуры, предназначенной для записи, принято начинать с приставки Set, после которой следует имя свойства.
|
|
Для объявления свойства используются зарезервированные слова property, read и write. Слова read и write обозначают начало разделов, содержащих имена методов, предназначенных для чтения и записи соответственно. Например
type
TStudent = class
FAge: integer;
function GetAge: integer;
procedure SetAge(Value: integer);
property Age: integer read GetAge write SetAge;
end;
Здесь Age - свойство, связанное с полем FAge, GetAge и SetAge - методы, предназначенные соответственно для чтения и записи в поле FAge.
Для обращения к свойству в тексте программы, так же, как для полей и методов, необходимо использовать составные имена, состоящие из имени объекта, точки и имени свойства, например:
var
GoodStudent: TStudent;
HisAge: integer;
begin
GoodStudent:= TStudent.Create;
GoodStudent.Age:= 19;
HisAge:= GoodStudent. Age;
GoodStudent.Free;
end;
Использование свойств, в отличие от непосредственного использования полей, позволяет осуществлять различные дополнительные действия. Например, мы могли бы непосредственно поместить в поле FAge нужное значение
GoodStudent.FAge:= 19;
Но, используя свойство Age, мы можем реализовать в методах, предназначенных для чтения и записи GetAge и SetAge, различные дополнительные действия: проверку вводимых значений на принадлежность к заданному диапазону, выдачу сообщений на экран, изменение внешнего вида объекта на экране и т.д.
В тех случаях, когда дополнительные действия при чтении или записи в поле не нужны, вместо имени соответствующего метода можно указать имя поля:
type
TStudent = class
FAge: integer;
procedure SetAge(Value: integer);
|
|
property Age: integer read FAge write SetAge;
end;
Поля могут быть доступны только для чтения или только для записи. В этом случае при описании свойства опускаются разделы read или write. Например, если мы хотим, чтобы свойство Age было доступным только для чтения, нам необходимо убрать раздел write:
type
TStudent = class
FAge: integer;
function GetAge: integer;
property Age: integer read GetAge;
end;
Заметим, что свойство может быть и не связано с конкретным полем. В этом случае в свойстве просто определяются два метода, выполняющие некоторые действия с данными того же типа, что и свойство.