[fpc-pascal] 2.1.1 new protected

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


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.

> end;
> -------------------------------
> 
> 
> Any idea?
> 
> 
> Mattias
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal




More information about the fpc-pascal mailing list