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@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal