我有 :
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'。我能怎么做 ?
uj5u.com熱心網友回復:
問題是多載引入的歧義。如果沒有多載,您的代碼就可以正常作業。
您可以通過使用臨時變數來消除多載的歧義,該變數的型別與您要選擇的多載相匹配:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371176.html
標籤:德尔福
