unit delegates5u; type TFunc1 = function : integer; TFunc2 = function(i : integer) : integer; TFunc3 = function(var i : integer) : integer; TFunc4 = function(params a : array of integer) : integer; TFunc5 = function(const i : integer) : integer; TProc1 = procedure; TProc2 = procedure(i : integer); TProc3 = procedure(params a : array of integer); function Func1 : integer; begin end; function Func2(i : integer) : integer; begin end; function Func3(var i : integer) : integer; begin end; function Func4(params a : array of integer) : integer; begin end; function Func5(const i : integer) : integer; begin end; procedure Proc1; begin end; procedure Proc2(i: integer); begin end; procedure Proc3(params arr : array of integer); begin end; procedure Test1(f : TFunc1); begin f; end; procedure Test2(f : TFunc2); begin f(2); end; procedure Test3(f : TFunc3); begin var i := 1; f(i); end; procedure Test4(f : TFunc5); begin var i := 0; f(i); end; var f1 : TFunc1; f2 : TFunc2; f3 : TFunc3; f4 : TFunc4; f5 : TFunc5; i : integer; p1 : TProc1; p2 : TProc2; p3 : TProc3; begin f1 := Func1; f2 := Func2; f3 := Func3; f4 := Func4; f5 := Func5; f1; f2(2); f3(i); f4(1,2,3); f5(i); p1 := Proc1; p2 := Proc2; p3 := Proc3; p1; p2(2); p3(1,2); Test1(Func1); Test2(Func2); Test3(Func3); Test4(Func5); end.