這裏是我的代碼示例:如何從Delphi中的子類獲取指向基類中方法的指針?
type
TMyBaseClass = class
public
procedure SomeProc; virtual;
end;
TMyChildClass = class(TMyBaseClass)
public
procedure SomeProc; override;
end;
var
SomeDelegate: procedure of object;
procedure TMyBaseClass.SomeProc;
begin
ShowMessage('Base proc');
end;
procedure TMyChildClass.SomeProc;
begin
ShowMessage('Child proc');
// here i want to get a pointer to TMyBaseClass.SomeProc (NOT IN THIS CLASS!):
SomeDelegate := SomeProc;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyChildClass.Create do
try
// there will be "Child proc" message:
SomeProc;
finally
Free;
end;
// there i want to get "Base proc" message, but i get "Child proc" again
// (but it is destroyed anyway, how coud it be?):
SomeDelegate;
end;
謝謝!你的第一種方法正是我想要的=) – SomeOne 2010-09-24 06:23:16
請注意Michal Niklas對違反訪問權限的說法。你仍然會得到一個,即使是「繼承」。這是因爲你不能有一個指向CLASS方法的指針(除非它被聲明爲「class procedure」),只能用於OBJECT的方法。當你調用Free()時,你的對象被銷燬,並且任何對它的引用,包括SomeDelegate(包含對它的函數的引用)都不再有效。 – himself 2010-09-24 11:54:13
當我嘗試使用我的Turbo Delphi代碼時,出現訪問衝突異常。 – 2010-09-24 12:09:36