Боюсь, это, наверное, немного глупый вопрос, но он меня сильно озадачил.
Я ищу самый простой способ передать метод объекта в процедуру, чтобы процедура могла вызывать метод объекта (например, после истечения времени ожидания или, возможно, в другом потоке). Так что в основном я хочу:
- Захватить ссылку на метод объекта.
- Передайте эту ссылку в процедуру.
- Используя эту ссылку, вызовите метод объекта из процедуры.
Я полагаю, что смог бы добиться того же эффекта, используя интерфейсы, но я подумал, что есть другой способ, поскольку существует объявление типа «процедура объекта».
Следующая не не работает, но может ли она помочь объяснить, где я в замешательстве ...?
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;
(После ответа на вопрос я удалю приведенный выше код, если это не поможет объяснению).