{$mode objfpc}{$H+}{$J-}
uses
SysUtils;
type
TMyMethod = procedure (const A: Integer) of object;
TMyClass = class
CurrentValue: Integer;
procedure Add(const A: Integer);
procedure Multiply(const A: Integer);
procedure ProcessTheList(const M: TMyMethod);
end;
procedure TMyClass.Add(const A: Integer);
begin
CurrentValue := CurrentValue + A;
end;
procedure TMyClass.Multiply(const A: Integer);
begin
CurrentValue := CurrentValue * A;
end;
procedure TMyClass.ProcessTheList(const M: TMyMethod);
var
I: Integer;
begin
CurrentValue := 1;
for I := 2 to 10 do
M(I);
end;
var
C: TMyClass;
begin
C := TMyClass.Create;
try
C.ProcessTheList(@C.Add);
WriteLn('1 + 2 + 3 ... + 10 = ', C.CurrentValue);
C.ProcessTheList(@C.Multiply);
WriteLn('1 * 2 * 3 ... * 10 = ', C.CurrentValue);
finally
FreeAndNil(C);
end;
end.