[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