使用Delphi创建Windows应用程序时,可以在TStringList变量中存储函数指针,类似于......
function n_func(var data: integer): integer;
begin
//do something with data that will change its value
Result := data;
end;
...
var
ls: TStringList;
begin
try
ls := TStringList.Create;
ls.AddObject('myfunc', TObject(@n_func));
...
...
finally
ls.Free;
end;
end;
但这不是Android中的一个选项,I've read this article解释了如何在需要存储对象的引用时解决问题。当需要存储对函数的引用时,可能是类似的解决方案,稍后将在应用程序执行期间动态调用该函数?
答案 0 :(得分:4)
使用字典。声明函数的类型:
type
TMyFuncType = reference to function(var data: integer): integer;
然后是字典:
var
Dict: TDictionary<string, TMyFuncType>;
以通常的方式创建一个:
Dict := TDictionary<string, TMyFuncType>.Create;
像这样添加:
Dict.Add('myfunc', n_func);
像这样检索
Func := Dict['myfunc'];
从文档中了解更多信息:http://docwiki.embarcadero.com/Libraries/en/System.Generics.Collections.TDictionary