tchlp43.pp 951 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. { the extended type is searched first for a inherited method even if it's
  2. defined as "override" }
  3. program tchlp43;
  4. {$ifdef fpc}
  5. {$mode delphi}
  6. {$endif}
  7. {$apptype console}
  8. type
  9. TFoo = class
  10. function Test(aRecurse: Boolean): Integer; virtual;
  11. end;
  12. TObjectHelper = class helper for TObject
  13. function Test(aRecurse: Boolean): Integer; virtual;
  14. end;
  15. TFooHelper = class helper(TObjectHelper) for TFoo
  16. function Test(aRecurse: Boolean): Integer; override;
  17. end;
  18. function TFoo.Test(aRecurse: Boolean): Integer;
  19. begin
  20. Result := 1;
  21. end;
  22. function TObjectHelper.Test(aRecurse: Boolean): Integer;
  23. begin
  24. Result := 2;
  25. end;
  26. function TFooHelper.Test(aRecurse: Boolean): Integer;
  27. begin
  28. if aRecurse then
  29. Result := inherited Test(False)
  30. else
  31. Result := 3;
  32. end;
  33. var
  34. f: TFoo;
  35. res: Integer;
  36. begin
  37. f := TFoo.Create;
  38. res := f.Test(True);
  39. Writeln('f.Test: ', res);
  40. if res <> 1 then
  41. Halt(1);
  42. Writeln('ok');
  43. end.