我有:
TMyProc = reference to procedure(const adata: String);
TMyObject = Class(Tobject)
private
FMyProc: TMyProc ;
public
Property MyProc: TMyProc read FMyProc write FMyProc;
end;
和
TAnObject = Class(Tobject)
public
procedure MyProcImpl(const adata: integer); overload;
procedure MyProcImpl(const adata: String); overload;
end;
我想做类似的事情
MyObject.MyProc := AnObject.MyProcImpl;
但我得到了Incompatible types: 'TMyProc' and 'Procedure of object'
。我该怎么办?
最佳答案
问题是重载引入的歧义。如果没有重载,您的代码将可以正常工作。
您可以使用一个临时变量来消除重载的歧义,该变量的类型与您要选择的重载相匹配:
program SO70183946;
type
TMyProc = reference to procedure(const adata: string);
TMyProcOfObject = procedure(const adata: string) of object;
TMyObject = class
private
FMyProc: TMyProc;
public
property MyProc: TMyProc read FMyProc write FMyProc;
end;
TAnObject = class
public
procedure MyProcImpl(const adata: integer); overload;
procedure MyProcImpl(const adata: string); overload;
end;
procedure TAnObject.MyProcImpl(const adata: integer);
begin
end;
procedure TAnObject.MyProcImpl(const adata: string);
begin
end;
var
MyObject: TMyObject;
AnObject: TAnObject;
MyProcOfObject: TMyProcOfObject;
begin
MyProcOfObject := AnObject.MyProcImpl;
MyObject.MyProc := MyProcOfObject;
end.
解决这个问题的另一种方法是显式写出匿名方法,而不是依赖编译器在幕后生成它:
MyObject.MyProc :=
procedure(const adata: string)
begin
AnObject.MyProcImpl(adata);
end;
关于delphi - 如何将 "of object"程序分配给 "reference to"程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70183946/