fork download
  1. {$mode objfpc} {$h+} {$modeswitch duplicatelocals}
  2. uses
  3. SysUtils;
  4.  
  5. type
  6. IMyObject = interface
  7. procedure DoSomething;
  8. end;
  9.  
  10. TMyObject = class(TInterfacedObject, IMyObject)
  11. name: string;
  12. constructor Create(const name: string);
  13. destructor Destroy; override;
  14. procedure DoSomething;
  15. end;
  16.  
  17. constructor TMyObject.Create(const name: string);
  18. begin
  19. inherited Create;
  20. self.name := name;
  21. writeln('Объект ', name, ' создан.');
  22. end;
  23.  
  24. destructor TMyObject.Destroy;
  25. begin
  26. writeln('Объект ', name, ' уничтожен.');
  27. inherited Destroy;
  28. end;
  29.  
  30. procedure TMyObject.DoSomething;
  31. begin
  32. writeln('Объект ', name, ' работает.');
  33. end;
  34.  
  35. procedure Main;
  36. var
  37. o: IMyObject;
  38. begin
  39. o := TMyObject.Create('A');
  40. o.DoSomething;
  41.  
  42. o := TMyObject.Create('B');
  43. o.DoSomething;
  44.  
  45. o := TMyObject.Create('C');
  46. raise Exception.Create('Упс.');
  47. o.DoSomething;
  48. end;
  49.  
  50. begin
  51. try
  52. Main;
  53. except
  54. on e: Exception do writeln(e.Message);
  55. end;
  56. end.
Success #stdin #stdout 0s 4268KB
stdin
Standard input is empty
stdout
Объект A создан.
Объект A работает.
Объект B создан.
Объект A уничтожен.
Объект B работает.
Объект C создан.
Объект B уничтожен.
Объект C уничтожен.
Упс.