Как я могу сохранить метод интерфейса в указателе метода?

Вот пример:

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", поэтому я не могу использовать приведение типов. Но я знаю, что он будет в любом случае (потому что, если вы реализуете интерфейс, вы должны реализовать все его методы). Так почему я не могу просто получить указатель на этот метод? Может есть другой способ? Спасибо.

5
задан Rob Kennedy 5 July 2011 в 18:02
поделиться