匿名方法作为函数结果 [英] Anonymous method as function result
本文介绍了匿名方法作为函数结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想要做的是将一个匿名方法(作为函数结果我将它分配给相同类型的变量)。 Delphi抱怨无法完成分配任务。显然,Delphi的东西我想分配 GetListener函数而不是该函数的结果。非常感谢对此的任何帮助。
What I want to do is to assign an anonymous method which I get as a function result to a variable of the same type. Delphi complains about not beeing able to do the assignement. Obviously Delphi things I want to assign the "GetListener" function instead of the result of that same function. Any help with this is very much appreciated.
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;
推荐答案
使用以下语法:
Listener:= MyClass.GetListener();
我已经写了以下示例来说明MyClass.GetListener()和MyClass.GetListener分配之间的区别:
I have written the following example to make clear the difference between the MyClass.GetListener() and MyClass.GetListener assignments:
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;
这篇关于匿名方法作为函数结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文