4.7 Свойства (Properties) |
Вверх Предыдущий Следующий |
В глобальном блоке объявлений можно объявлять свойства, так же, как они могли бы быть определены в классе. Различие в том, что глобальное свойство не нуждается в экземпляре класса: есть только 1 экземпляр этого свойства. Кроме этого, глобальное свойство ведет себя как свойство класса. Спецификаторы чтения-записи для глобального свойства должны также быть регулярными процедурами, но не методами. Понятие глобального свойства является специфическим для Free Pascal, и не существует в режиме Delphi. Режим ObjFPC обязан работать со свойствами. Понятие глобального свойства может использоваться, чтобы 'скрыть' расположение значения, или вычислить значение на лету, или проверить значения, которые записаны свойству. Объявление выглядит следующим образом: Свойства Ниже приведен пример: {$mode objfpc} unit testprop;
Interface
Function GetMyInt : Integer; Procedure SetMyInt(Value : Integer); Property MyProp : Integer Read GetMyInt Write SetMyInt;
Implementation
Uses sysutils;
Var FMyInt : Integer;
Function GetMyInt : Integer; begin Result:=FMyInt; end;
Procedure SetMyInt(Value : Integer); begin If ((Value mod 2)=1) then Raise Exception.Create('MyProp может содержать только чётные значения'); FMyInt:=Value; end;
end. Спецификаторы чтения-записи могут быть скрыты, объявляя их в другом модуле, который должен быть в списке uses используемых модулей. Это может использоваться, чтобы скрыть спецификаторы доступа для чтения-записи для программистов, так же, как если бы они были в разделе private класса (обсуждены ниже). Для предыдущего примера это могло выглядеть следующим образом: {$mode objfpc} unit testrw;
Interface
Function GetMyInt : Integer; Procedure SetMyInt(Value : Integer);
Implementation
Uses sysutils;
Var FMyInt : Integer;
Function GetMyInt : Integer; begin Result:=FMyInt; end;
Procedure SetMyInt(Value : Integer); begin If ((Value mod 2)=1) then Raise Exception.Create('Разрешены только чётные значения'); FMyInt:=Value; end;
end. Модуль testprop был бы тогда похож на: {$mode objfpc} unit testprop;
Interface
uses testrw;
Property MyProp : Integer Read GetMyInt Write SetMyInt;
Implementation
end. Больше информации о свойствах может быть найдено в Глава 6 Классы. |