zoukankan      html  css  js  c++  java
  • 依据函数名字符串执行函数

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

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

    不再废话直接贴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即可。

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

  • 相关阅读:
    JavaScript 属性和方法的类型
    2013年系统集成项目管理工程师真题 上午 附参考答案
    Openssl 学习—1.概述
    完成端口笔记
    激活 Microsoft office 2010、visio 2010方法
    Openssl 学习—0.基础
    socket编程入门(函数)
    Openssl 学习—3.RSA
    Openssl 学习—2.BIGNUM结构
    为什么百度有啊还不开始宣传!
  • 原文地址:https://www.cnblogs.com/BlackList-Sakura/p/4073451.html
Copyright © 2011-2022 走看看