Допустим, у нас есть интерфейс I
, объект O
и контейнер sl
:
type
rootInterface = Interface
end;
childOfRootInterface = interface(rootInterface)
end;
ObjectImplementsRootInterface = class(TObject, I)
end;
ObjectImplementsChildOfRootInterface = class(TOtherObject, I2);
end;
var
aStringList: TStringList;
Предполагается, что sl
инициализирован.
Если мы сделаем
aStringList.Items.AddObject('root', ObjectImplementsRootInterface );
тогда мы не можем сделать
ObjectImplementsRootInterface := I(aStringList.Items.Objects([0]));
потому что Дельфи это запрещает. так стараюсь:
ObjectImplementsRootInterface := TObject(aStringList.Items.Objects([0]));
Однако мы вставили childOfRootInterface
и хотим вернуть childOfRootInterface
, поэтому мы делаем
ObjectImplementsChildOfRootInterface := childOfRootInterface (sl.Items.Objects([0]));
Но ObjectImplementsChildOfRootInterface
и ObjectImplementsRootInterface
имеют разные суперсимволы!
Хотя они поддерживают один и тот же интерфейс, мы ничего не можем сделать.
В Java вы можете передавать объекты, если они поддерживают интерфейс. В Java это будет возможно, так что теперь после всего этого планирования; что я могу сделать в Delphi?
Обновление: поменял имена, однако пример мог бы одолеть меня и победить, не могу найти направо и налево.