Skip to content

Instantly share code, notes, and snippets.

@ritalin
Created June 27, 2013 04:24
Show Gist options
  • Save ritalin/5873939 to your computer and use it in GitHub Desktop.
Save ritalin/5873939 to your computer and use it in GitHub Desktop.
To Call method differing the number of arrguments...?
program Project1;
uses
Sysutils;
{$APPTYPE CONSOLE}
type
TMethodWithParam = procedure (arg: integer) of object;
TMethodWithParam2 = procedure (arg1, arg2: integer) of object;
TMethodWithParam5 = procedure (arg1, arg2, arg3, arg4, arg5: integer) of object;
TSample = class
published
procedure MethodA;
procedure MethodB(arg: integer);
procedure MethodC(arg1, arg2, arg3, arg4: integer);
end;
procedure TSample.MethodA;
begin
Writeln('Called methodA w/o args.');
end;
procedure TSample.MethodB(arg: integer);
begin
Writeln(Format('Called methodB with args (arg = %d).', [arg]));
end;
procedure TSample.MethodC(arg1, arg2, arg3, arg4: integer);
begin
Writeln(Format('Called methodB with args (arg1 = %d, arg2 = %d, arg3 = %d, arg4 = %d).', [arg1, arg2, arg3, arg4]));
end;
var
obj: TSample;
i: integer;
m: TMethod;
begin
obj := TSample.Create;
i := 100;
m.Data := obj;
m.Code := obj.MethodAddress('MethodA');
TMethodWithParam(m)(i);
m.Code := obj.MethodAddress('MethodB');
TMethodWithParam(m)(i);
TMethodWithParam2(m)(i, 200);
m.Code := obj.MethodAddress('MethodC');
TMethodWithParam5(m)(i, 200, 300, 400, 500);
Readln;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment