在下面的代碼中我定義了兩個方法指針類型。我需要另一個接受任何這些類型參數的過程,並根據其他值使用它。但我不能找到這兩種類型的基類型,以便能夠既傳遞到程序:是否有方法指針的基類型?
type
TIntProc: procedure (I: Integer) of object;
TStrProc: procedure (S: string) of object;
....
procedure TForm1.CallbackTest(A: Integer; Callback: procedure of object {What type should I use here?});
var
IntProc: TIntProc;
StrProc: TStrProc;
begin
if A = 1 then begin
IntProc:= TIntProc(Callback);
IntProc(100);
end else begin
StrProc:= TStrProc(Callback);
StrProc('Hello');
end;
end;
procedure TForm1.MyIntProc(I: Integer);
begin
ShowMessage(IntToStr(I));
end;
procedure TForm1.MyStrProc(S: string);
begin
ShowMessage(S);
end;
我應該能夠編寫:
CallbackTest(1, MyIntProc);
也:
CallbackTest(2, MyStrProc);
但我肯定會得到錯誤,因爲procedure of object
用作第二個參數的類型不是procedure (I: Integer) of object
和procedure (S: string) of object
的基本類型。任何想法如何做到這一點?
您可以詳細說明對TMethod進行類型轉換嗎?我必須使用方法指針,並且重載解決方案不符合我的要求。 –
重載方法適合這個問題。也許你真正的問題與問題不同。你說,「我必須使用方法指針」。精細。我答案中的代碼使用方法指針。爲什麼你不得不放棄類型安全?你明白這個的後果嗎? –
至於類型轉換,我假設你知道類型轉換是什麼。我鏈接到類型轉換的文檔。你知道什麼是類型轉換嗎?我只是想弄清楚什麼樣的水平。 –