уточняю формулировку темы
Как получить типы интерфейсов хранящихся в TInterfaceList
Хочу хранить в одном списке TInterfaceList два типа интерфейсов ILine и IBlock
наполнить InterfaceList ими удается, а вот получить их и распознать какой
интерфейс у того или иного элемента не получается
имею такую структуру кода...
Код:
unit Interfaces;
IData = interface
end;
ILine = interface(IData)
end;
IBlock = interface(IData)
end;
IProgramm = interface
function Get(Index: Integer): IData;
procedure Put(Index: Integer; const Item: IData);
property Items[Index: Integer]: IData read Get write Put; default;
end;
Код:
unit Objects;
TLine = class(TInterfaceList, ILine)
end;
TBlock = class(TInterfaceList, IBlock)
end;
TProgramm = class(TInterfaceList, IProg)
function Get(Index: Integer): IData;
procedure Put(Index: Integer; const Item: IData);
property Items[Index: Integer]: IData read Get write Put; default;
function Add(const Item: IData): Integer;
end;
Programm: TProgramm;
Block: IBlock;
Line: ILine;
// Programm наполняется интерфейсами создаваемых объектов
...
Programm.Add(Block);
...
Programm.Add(Block);
...
Programm.Add(Line);
...
Programm.Add(Line);
// теперь пытаюсь получать объекты
for i:=0 to Programm.Count-1 do begin
// вот в этом месте, когда Items[i] = TBlock($....) as IData
// возвращает True, т.е. считает что объект поддерживает ILine
// а я жду что он должен поддерживать только IBlock
if Supports(Programm.Items[i], ILine, Line) then
Supports возвращает True когда Items[i] в отладчике отображается как "TBlock($....) as IData"
Понятно, что я что то делаю не так, но как мне узнать какой текущий итем, ILine или IBlock?