Я боюсь, что это, наверное, немного фиктивный вопрос, но у меня все в порядке.
Я ищу самый простой способ передать метод объекта в процедуру, чтобы процедура могла вызвать метод объекта (например, после таймаута или, возможно, в другом потоке). Поэтому в основном я хочу:
- Захват ссылки на метод объекта.
- Передайте эту ссылку на процедуру.
- Используя эту ссылку, вызовите метод объекта из процедуры.
Я полагаю, что я мог бы добиться такого же эффекта с использованием интерфейсов, но я думал, что существует другой способ, так как это объявление типа "процедура объекта" существует.
Следующие действия не работают, но могут ли они объяснить, где я запутался...?
interface
TCallbackMethod = procedure of object;
TCallbackObject = class
procedure CallbackMethodImpl;
procedure SetupCallback;
end;
implementation
procedure CallbackTheCallback(const callbackMethod: TCallbackMethod);
begin
callbackMethod();
end;
procedure TCallbackObject.CallbackMethodImpl;
begin
// Do whatever.
end;
procedure TCallbackObject.SetupCallback;
begin
// following line doesn't compile - it fails with "E2036 Variable required"
CallbackTheCallback(@self.CallbackMethodImpl);
end;
(Как только вопрос будет дан, я удалю вышеуказанный код, если это не поможет объяснению.)