The concept of a global property can be used to 'hide' the location of the value, or to calculate the value on the y, or to check the values which are written to the property.
The declaration is as follows:
_________________________________________________________________________________________________________
Properties
___________________________________________________________________
The following is an example:
{$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 can only contain even value'); FMyInt:=Value; end; end. |
The read/write speci ers can be hidden by declaring them in another unit which must be in the uses clause of the unit. This can be used to hide the read/write access speci ers for programmers, just as if they were in a private section of a class (discussed below). For the previous example, this could look as follows:
{$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('Only even values are allowed'); FMyInt:=Value; end; end. |
The unit testprop would then look like:
{$mode objfpc}
unit testprop; Interface uses testrw; Property MyProp : Integer Read GetMyInt Write SetMyInt; Implementation end. |