[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