Assigning to inherited property calls setter of the child class
Original Reporter info from Mantis: Ask
-
Reporter name: Alexander S. Klenin
Original Reporter info from Mantis: Ask
- Reporter name: Alexander S. Klenin
Description:
Given the definitions:
type
T1 = class
procedure SetP(AP: Integer); virtual;
property P: Integer read FP write SetP;
end;
T2 = class(T1)
procedure SetP(AP: Integer); override;
end;
procedure T1.SetP(AP: Integer);
begin Writeln('T1.SetP'); end;
procedure T2.SetP(AP: Integer);
begin Writeln('T2.SetP'); inherited P := AP; end;
the assignment t2obj.P := 1 causes infinite recursion,
because "inherited P := AP" calls T2.SetP instead of T1.SetP.
Additional information:
Delphi does the same, but I wonder if this should be changed anyway?
Even experienced developers might easily become confused --
see e.g. http://bugs.freepascal.org/view.php?id=13418
Mantis conversion info:
- Mantis ID: 13630
- Version: 2.3.1