delphi通过函数名动态调用函数的方法

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

 

type

  TMyCacl = class(TObject)

  public

    { Public declarations }

    function DynamicFun(funName: string; const a, b: integer): integer;

  published

    function add(const a, b: integer): integer;

    function dec(const a, b: integer): integer;

  end;

  TNewMyCacl = class(TMyCacl)

  published

    function Multi(const a, b: integer): integer;

  end;

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

{ TMyCacl }

 

function TMyCacl.add(const a, b: integer): integer;

begin

  result := a + b;

end;

 

function TMyCacl.dec(const a, b: integer): integer;

begin

  result := a - b;

end;

 

function TMyCacl.DynamicFun(funName: string;const  a, b: integer): integer;

var

  pfun: function(const a, b: integer): integer of object;

begin

  if self.MethodAddress(funName) <> nil then

  begin

    TMethod(pfun).Code := MethodAddress(funName);

    result := pfun(a, b);

  end

  else  result := 0;

end;

 

{ TNewMyCacl }

 

function TNewMyCacl.Multi(const a, b: integer): integer;

begin

  result := a * b;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  tmp: TMyCacl;

  i: integer;

begin

  tmp := TNewMyCacl.Create();

  if tmp.MethodAddress('Multi') <> nil  then

  begin

    i := tmp.DynamicFun('Multi', 102, 3);

    showmessage(inttostr(i));

  end;

  tmp.Free;

end;

 

end.

 

转载于:https://www.cnblogs.com/hsbs/p/4311347.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值