依据函数名字符串执行函数

这个问题虽然不是很严重,但却困扰本人许久。曾经多方询问朋友、查阅资料均无法达到效果。

今日偶然查到一些东西,经实测的却可行,也算了却了一桩心愿。

不再废话直接贴DEMO代码

 1 unit Unit2;
 2
 3 interface
 4
 5 uses
 6   Vcl.Dialogs, Vcl.Forms, System.Generics.Collections, System.Variants;
 7
 8 type
 9   TMyIntf = class(TForm)
10   public
11     class function PublicFunc(FuncName : string; DicIn, DicOut: TDictionary<string, Variant>): Boolean;
12   published
13     function Red(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
14     function Black(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
15     function Blue(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
16     function Green(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
17   end;
18
19 implementation
20
21 { TMyIntf }
22
23 function TMyIntf.Black(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
24 begin
25   DicOut.AddOrSetValue(‘Color‘, ‘Black‘);
26   Result := True;
27 end;
28
29 function TMyIntf.Blue(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
30 begin
31   DicOut.AddOrSetValue(‘Color‘, ‘Blue‘);
32   Result := True;
33 end;
34
35 function TMyIntf.Green(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
36 begin
37   DicOut.AddOrSetValue(‘Color‘, ‘Green‘);
38   Result := True;
39 end;
40
41 class function TMyIntf.PublicFunc(FuncName : string; DicIn,
42   DicOut: TDictionary<string, Variant>): Boolean;
43 var
44   Func : function(DicIn, DicOut: TDictionary<string, Variant>): Boolean of object;
45 begin
46   Result := False;
47   TMethod(Func).Code := TMyIntf.MethodAddress(FuncName);
48   if Assigned(TMethod(Func).Code) then
49     if Func(DicIn, DicOut) then
50       Result := True;
51 end;
52
53 function TMyIntf.Red(DicIn, DicOut: TDictionary<string, Variant>): Boolean;
54 begin
55   DicOut.AddOrSetValue(‘Color‘, ‘Red‘);
56   Result := True;
57 end;
58
59 end.

调用非常简单,引用单元然后直接调用类函数PublicFunc即可。

此篇如若有幸被大家浏览,若您有更好的方法请不吝赐教!拜谢!

时间: 2024-10-31 04:49:40

依据函数名字符串执行函数的相关文章

lua 根据函数名字符串来执行函数

function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunction"]; if fun then fun("is ok"); end lua 根据函数名字符串来执行函数

立即执行函数表达式(自执行函数)

立即执行函数表达式 立即执行函数表达式,大部分人也称为自执行函数. 自执行函数的写法 匿名函数 (function(){ console.log(2) })() 具名函数 (function log(){ console.log(2) })() 自执行函数的传参 (function add(a, b){ console.log(a + b) })(1,2) 返回值 let fn = (function add(a,b){ return a + b; })(2,4); console.log(fn

JavaScript中的匿名函数、立即执行函数和闭包

匿名函数是没有函数名的,不能单独使用: 立即执行函数是基于匿名函数实现的,也没有函数名,会在定义后立即执行: 闭包是有权访问另一个函数作用域中的变量的函数.匿名函数.立即执行函数只要满足 有权访问另一个函数作用域中的变量 这一个条件,就成了闭包. 匿名函数 匿名函数:没有函数名的函数 匿名函数不能单独定义与使用 function foo() { console.log('普通函数'); } // 去掉函数名 foo function () { // SyntaxError: Function s

Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成[email&#160;protected])

delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.1. 声明中不加__stdcall,采用VC默认格式__cdecl,但在Delphi中要注明调用格式为cdecl.C++中例子: [cpp] view plain copy print? extern "C" int __declspec(dllexport) add(int x, int y); Delphi中例

onload函数和自执行函数的区别(jquery API网址:http://jquery.cuishifeng.cn/)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>jQuery 01 simples</title> <script src="js/jquery-1.12.1.js" type="text/javascript"></script> <sc

函数名以和函数指针

调用时:(*FunP)(20);//这是通过函数指针变量FunP来调用MyFun函数的. 1 void MyFun(int x);//此处的申明也可以写成:void MyFun(int); 2 void (*FunP)(int);//此处的申明也可以写成:void (*FunP)(int);但习惯上一般不这样. 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 { 6 MyFun(10);//这是直接调用MyFun函数 7 FunP = MyFun;//将My

Windows内核函数(1) - 字符串处理函数

1.ASCII字符串和宽字符串 打印一个ASCII字符串: CHAR* string = “Hello”; KdPrint((“%s\n”, string));        //s为小写 打印一个宽字符字符串 WCHAR* string = L”Hello”; KdPrint((“%S\n”,string));         //s为大写 2.ANSI_STRING字符串与UNICODE_STRING字符串 ANSI_STRING: typedef struct _STRING {  USH

hive函数 -- split 字符串分割函数

hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 seconds, Fetched: 1 row(s) 返回值为一个数组 a.基本用法: 例1: split('a,b,c,d',',') 得到的结果: ["a","b","c","d"] b.截取字符串中的某个值: 当然,我们也可以指定取结

oracle函数大全-字符串处理函数

字符函数——返回字符值 这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类型所受的限制是相同的,比如: VARCHAR2数值被限制为2000字符(ORACLE 8中为4000字符),而CHAR数值被限制为255字符(在ORACLE8中是2000).当在过程性语句中使用时,它们可以被赋值给VARCHAR2 或者CHAR类型的PL/SQL变量. CHR 语法: chr(x)