Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2019, 01:57
snegok snegok вне форума
Прохожий
 
Регистрация: 09.11.2015
Сообщения: 2
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию Как получить типы интерфейсов хранящихся в TInterfaceList

уточняю формулировку темы
Как получить типы интерфейсов хранящихся в 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?

Последний раз редактировалось snegok, 31.03.2019 в 10:31.
Ответить с цитированием
 



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2020

ВКонтакте   Facebook   Twitter