On 11 aug 2006, at 13:35, Mattias Gaertner wrote:
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.
Not only that, but you'll get a run time error when compiling with -CR.
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
I think that this shouldn't be allowed either, to be honest. What you
seem to want is some sort of "friend" classes like in C++. I doubt
this will be added any time soon though.
Jonas
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal