[fpc-pascal] 2.1.1 new protected

Florian Klaempfl florian at freepascal.org
Fri Aug 11 13:53:42 CEST 2006


Michael Van Canneyt wrote:
> 
> 
> 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.

But only of the current instance, no?



More information about the fpc-pascal mailing list