[fpc-pascal] 2.1.1 new protected
Michael Van Canneyt
michael at freepascal.org
Fri Aug 11 13:51:40 CEST 2006
On Fri, 11 Aug 2006, Florian Klaempfl wrote:
> Mattias Gaertner wrote:
>> Recently the behaviour of the 'protected' keyword has changed in fpc 2.1.1.
>> Now I wonder how can I fix the code, that depends on this.
>
> Redesign :)
>
>>
>> I have some base classes, that defines methods to let derived classes
>> interact.
>> These methods should not be accessed directly from the outside, so they are
>> protected. But this does not work any longer. Of course I can safely
>> typecast, but for aesthetic reasons it looks pretty bad coding style to
>> typecast a class to the wrong class. For example:
>>
>> -- unit1 -------------------------
>> TMyClass = class
>> FFlag: boolean;
>> protected
>> procedure InternalSetFlag(b: boolean);
>> end;
>>
>> -- unit2 -------------------------
>> TDescendantClass1 = class(TMyClass)
>> public
>> procedure CallProtectedMethod(AnObject: TMyClass);
>> end;
>>
>> TDescendantClass2 = class(TMyClass)
>> end;
>>
>> procedure TDescendantClass1.CallProtectedMethod(AnObject: TMyClass);
>> begin
>> InternalSetFlag(true); // allowed
>> AnObject.InternalSetFlag(true); // not allowed any longer
>> TDescendantClass1(AnObject).InternalSetFlag(true); // allowed and works,
>> but ugly
>
>
> Shouldn't be allowed either imo.
Why not ?
In a descendent class you 'know' the protected method.
Michael.
More information about the fpc-pascal
mailing list