On Fri, 11 Aug 2006 13:42:49 +0200
Florian Klaempfl <[EMAIL PROTECTED]> 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 :)

Of FPC? Naaah, too much work. ;)

Of my code: Yes, but how?
Looking at the Delphi sources, I see that Borland has made many such methods 
public, which resulted in Code using the VCL the wrong way and creating VCL 
version dependent conflicts. I want to avoid this, and the old protected 
allowed that. But now I can't find any good alternative.


> > 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.

What's the alternative?


Mattias
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to