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

Reply via email to