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