関数ポインタと手続きポインタ(ルーチンの参照) ~Delphiソースコード集
まず最初に本ページでは、
戻り値のあるルーチン(function)を「関数」と呼び、戻り値の無いルーチン(procedure)を「手続き」と呼びます。
関数や手続きを参照するには以下のような種類の型の宣言があります。
種類 | 例 |
---|---|
関数のポインタ | TFunc = function(i:Integer):Integer; |
手続きのポインタ | TProc = procedure(i:Integer); |
関数のメソッドポインタ | TFuncO = function(i:Integer):Integer of object; |
手続きのメソッドポインタ | TProcO = procedure(i:Integer) of object; |
関数の参照型 | TFuncR = reference to function(i:Integer):Integer; |
手続きの参照型 | TProcR = reference to procedure(i:Integer); |
関数のポインタと手続きのポインタ
関数のポインタと手続きのポインタは「関数」や「手続き」を参照できます。
また、「静的クラスメソッドの関数」や「静的クラスメソッドの手続き」を参照できます。
interface type //関数のポインタ型の宣言 TFunc = function(i:Integer):Integer; //手続きのポインタ型の宣言 TProc = procedure(i:Integer); TMyClassClassStatic = class public class function FuncTest(i:Integer):Integer;static; //静的クラスメソッドの関数 class procedure ProcTest(i:Integer);static; //静的クラスメソッドの手続き end; function FuncTest(i:Integer):Integer; //関数 procedure ProcTest(i:Integer); //手続き implementation var Func : TFunc; Proc : TProc; begin Func := FuncTest; Func(1); Proc := ProcTest; Proc(2); //静的クラスメソッドの関数 Func := TMyClassClassStatic.FuncTest; Func(1); //静的クラスメソッドの手続き Proc := TMyClassClassStatic.ProcTest; Proc(2); end;
関数のメソッドポインタと手続きのメソッドポインタ
関数のメソッドポインタと手続きのメソッドポインタは「クラス(オブジェクト)の関数」や「クラス(オブジェクト)の手続き」を参照できます。
また、「クラスメソッドの関数」や「クラスメソッドの手続き」を参照できます。
interface type //関数メソッドポインタ TFuncO=function(i:Integer):Integer of object; //手続きのメソッドポインタ TProcO=procedure(i:Integer) of object; //通常のクラス TMyClass = class public function FuncTest(i:Integer):Integer; //クラスの関数 procedure ProcTest(i:Integer); //クラスの手続き end; TMyClassClass=class public class function FuncTest(i:Integer):Integer; //クラスメソッドの関数 class procedure ProcTest(i:Integer); //クラスメソッドの手続き end; implementation var FuncO : TFuncO; ProcO : TProcO; MyClass : TMyClass; begin MyClass := TMyClass.Create; try FuncO:=MyClass.FuncTest; FuncO(3); ProcO:=MyClass.ProcTest; ProcO(4); finally MyClass.Free; end; //クラスメソッドの関数 FuncO := TMyClassClass.FuncTest; FuncO(1); //クラスメソッドの手続き ProcO := TMyClassClass.ProcTest; ProcO(2); end;
関数の参照型と手続きの参照型
関数の参照型と手続きの参照型は、
「関数」や「手続き」を参照できます。
「静的クラスメソッドの関数」や「静的クラスメソッドの手続き」も参照できます。
「クラス(オブジェクト)の関数」や「クラス(オブジェクト)の手続き」も参照できます。
「クラスメソッドの関数」や「クラスメソッドの手続き」も参照できます。
更には、「無名関数」も参照できます。
以下に無名関数の例を示します。
interface type //関数の参照型 TFuncR = reference to function(i:Integer):Integer; //手続きの参照型 TProcR = reference to procedure(i:Integer); implementation var FuncR : TFuncR; ProcR : TProcR; begin //無名関数 FuncR := function(i:Integer):Integer begin Form1.Memo1.Lines.Add(i.ToString); Result:=i; end; FuncR(9); //無名手続き ProcR := procedure(i:Integer) begin Form1.Memo1.Lines.Add(i.ToString); end; ProcR(10); end;