Вот пример:
type
TDelegate = procedure of object;
I1 = interface
['{31D4A1C7-668B-4969-B043-0EC93B673569}']
procedure P1;
end;
TC1 = class(TInterfacedObject, I1)
procedure P1;
end;
...
var
obj: TC1;
int: I1;
d: TDelegate;
begin
obj := TC1.Create;
...
int := obj; // "int" may contains TSomeAnotherObjectWhichImplementsI1
d := obj.P1; // <- that's fine
d := int.P1; // <- compiler error
end;
Итак, как я могу выполнить последнюю операцию? Я не знаю, какой тип объекта будет присутствовать в переменной "int", поэтому я не могу использовать приведение типов. Но я знаю, что он будет в любом случае (потому что, если вы реализуете интерфейс, вы должны реализовать все его методы). Так почему я не могу просто получить указатель на этот метод? Может есть другой способ? Спасибо.