delphi通过函数名动态调用函数的方法(方便功能的扩展)
来源:互联网 发布:ios 网络请求缓存 编辑:程序博客网 时间:2024/04/30 17:15
unit Unit1;interfaceuses 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.
以上代码实现了类中通过函数名动态调用函数的方法,这样处理的一个优点是使类的复用性与扩展性得到加强,比如上例中,之前有一个类TMyCacl,能实现对a与b做加法与减法运算,
假如今后需求变化,需要增加其他运算时,可通过继承该类,重新写一个新运算方法,但是调用还用利用DynamicFun函数,这样在原来的类不要做修改的前提下,很好的实现功能的扩展。
这里一定要注意的是,需要被动态条用的函数一定要是 published 类型,否则MethodAddress将无法获取该函数。
分类: delphi
阅读全文
0 0
- delphi通过函数名动态调用函数的方法(方便功能的扩展)
- 通过函数名调用类的成员函数
- 通过函数名的字符串来调用这个函数
- 通过函数名调用函数
- JavaScript 通过字符串参数(函数名),调用对应的函数
- 通过函数调用,获取字符串的方法
- Delphi XE中动态表达式的应用 (调用自定义函数)
- 函数名调用方法
- Python 构建方便的函数调用
- VB动态调用外部函数的方法
- VB动态调用外部函数的方法
- VB动态调用外部函数的方法
- 函数名的“动态”生成
- [简记]通过函数指针调用函数的不同方法
- 根据函数名动态调用
- 使用sql Server 的函数功能返回 表,方便在程序中调用
- [Python]通过函数名字符串调用函数
- [Python]通过函数名字符串调用函数
- 关于JVM的面试总结
- Ubuntu下安装Cppcheck源码操作步骤
- 对于CAN ID的理解
- 再起航,我的学习笔记之JavaScript设计模式15(组合模式)
- FreeRDP的安装方法
- delphi通过函数名动态调用函数的方法(方便功能的扩展)
- 饿了么的架构设计及演进之路
- 非常有用的的C/C++框架和库的收藏
- 【CVTE笔试题】HTML中出现次数最多的元素标签
- LeetCode-Merge k Sorted Lists
- 网易等差数列
- docker中使用systemd
- centos6 搭建在线yum源
- 手动为docker配置固定ip