我想要做的是将作为函数结果获得的匿名方法分配给相同类型的变量。 Delphi 提示无法完成任务。显然,Delphi 的事情我想分配“GetListener”函数而不是同一函数的结果。非常感谢任何对此的帮助。
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 分配之间的区别:
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;
关于delphi - 匿名方法作为函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788424/