[fpc-pascal] Class helpers and properties

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Sat Jan 28 13:40:02 CET 2012


Sven Barth wrote:
> On 27.01.2012 23:51, Mark Morgan Lloyd wrote:
>> Sven Barth wrote:
>>> On 27.01.2012 22:46, Mark Morgan Lloyd wrote:
>>>> If a class has a public reader property like this:
>>>>
>>>> TLexemeList= class(TObject)
>>>> protected
>>>> fValue: TPrimaevalValue;
>>>> public
>>>> property Value: TPrimaevalValue read fValue;
>>>> ...
>>
>> Note that below is in a different unit.
>>
>>>> is there a way of allowing a class helper to augment this with a
>>>> protected writer property? My attempt as below messed up the reader:
>>>>
>>>> TLLEvaluator = class helper for TLexemeList
>>>> private
>>>> procedure SetValue(v: TPrimaevalValue);
>>>> protected
>>>> property Value: TPrimaevalValue write SetValue;
>>>> ...
>>>>
>>>
>>> In your exact example fValue is protected so the following should work:
>>>
>>> property Value: TPrimaevalValue read fValue write SetValue;
>>
>> That didn't work since once we're in the helper it can't see fValue
>> since it's only visible in the original unit.
>>
> 
> You are right that it does not work, but you're not right about the 
> reason. Helpers are able to access published, public and protected 
> members of its extended class (e.g. you're able to write "fValue := 
> aValue" in your setter inside the helper), but you can't make use of 
> fields and methods of the extended class in the helper's declaration.
> 
>> Obviously code in the helper can simply call SetValue(), but I thought
>> it worth raising in case I was missing something obvious.
>>
> 
> What about my second suggestion?

Sorry, it was getting late and I think I missed the GetValue() detail.

property Value: TPrimaevalValue read GetValue write SetValue;

..

function TLLEvaluator.GetValue: TPrimaevalValue;
begin
   Result := inherited Value;
end;

Thanks, I think that works but I need to do more testing.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list