首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匿名方法作为函数结果

匿名方法作为函数结果
EN

Stack Overflow用户
提问于 2010-05-07 20:15:16
回答 2查看 989关注 0票数 3

我想做的是将一个匿名方法赋值给一个相同类型的变量,该方法是作为函数结果得到的。Delphi抱怨不能进行赋值。显然,我想把"GetListener“函数赋值给Delphi,而不是这个函数的结果。任何对此的帮助都是非常感谢的。

代码语言:javascript
运行
复制
type
      TPropertyChangedListener = reference to procedure (Sender: TStimulus);

      TMyClass = class
        function GetListener:TPropertyChangedListener
      end;


    ....

    var MyClass: TMyClass;
        Listener: TPropertyChangedListener;
    begin
      MyClass:= TMyClass.create;
      Listener:= MyClass.GetListener;   //  Delphi compile error: E2010 Incompatible types:  TPropertyChangedListener' and 'Procedure of object' 

    end; 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-07 20:59:26

使用以下语法:

代码语言:javascript
运行
复制
  Listener:= MyClass.GetListener();

我写了下面的例子来说明MyClass.GetListener()和MyClass.GetListener赋值之间的区别:

代码语言:javascript
运行
复制
type
  TProcRef = reference to procedure(Sender: TObject);
  TFunc = function: TProcRef of object;

  TMyClass = class
    function GetListener: TProcRef;
  end;

function TMyClass.GetListener: TProcRef;
begin
  Result:= procedure(Sender: TObject)
  begin
    Sender.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass: TMyClass;
  ProcRef: TProcRef;
  Func: TFunc;

begin
  MyClass:= TMyClass.Create;
// standard syntax
  ProcRef:= MyClass.GetListener();

// also possible syntax
//  Func:= MyClass.GetListener;
//  ProcRef:= Func();

  ProcRef(MyClass);
end;
票数 12
EN

Stack Overflow用户

发布于 2010-05-07 20:40:57

我发现解决这个问题的唯一方法是像这样声明你的GetListener:

代码语言:javascript
运行
复制
procedure GetListener(var a: TPropertyChangedListener);

可能有一些语法强制编译器考虑函数的结果,而不是函数本身,但我找不到任何语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2788424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档