1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
   | program Project16;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Classes, Windows;
 
type
  // simple function
  TFunction    = function(A, B: integer): integer;
 
  // only with D2009+
  TRefFunction = reference to function(A, B: integer): integer;
 
  TMaClasse = class
  public
    // only with D2007+
    class function F(A,B: integer): integer; static;
  end;
 
 
class function TMaClasse.F(A, B: integer): integer;
begin
  result := A + B;
end;
 
// simple function
function XF(A, B: integer): integer;
begin
  result := A * B;
end;
 
 
// caller for "reference to" functions
procedure RefCallCalcAB(aFunction: TRefFunction; const A, B: integer);
begin
  writeln(aFunction(A, B));
end;
 
// caller for simple function 
procedure CallCalcAB(aFunction: TFunction; const A, B: integer);
begin
  Writeln(aFunction(A, B));
end;
 
var
  Cl : TMaClasse;
begin
  // can call all functions
  RefCallCalcAB(XF, 10, 20); // 200
 
  // can call only simple function 
  CallCalcAB(XF, 10, 20); // 200
 
  Cl := TMaClasse.Create;
  try
    RefCallCalcAB(CL.F, 10, 20); // 30
 
    // Compiling ok if CL.F is class function static.
    CallCalcAB(CL.F, 10, 20); // 30
 
    ReadLn;
  finally
    Cl.Free;
  end;
end. | 
Partager