我想做的是将一个匿名方法赋值给一个相同类型的变量,该方法是作为函数结果得到的。Delphi抱怨不能进行赋值。显然,我想把"GetListener“函数赋值给Delphi,而不是这个函数的结果。任何对此的帮助都是非常感谢的。
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; 发布于 2010-05-07 20:59:26
使用以下语法:
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;发布于 2010-05-07 20:40:57
我发现解决这个问题的唯一方法是像这样声明你的GetListener:
procedure GetListener(var a: TPropertyChangedListener);可能有一些语法强制编译器考虑函数的结果,而不是函数本身,但我找不到任何语法。
https://stackoverflow.com/questions/2788424
复制相似问题