[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