|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получить список имен классов, реализующий интерфейс
Добрый день! Нужна помощь. Задача состоит в следующем:
Есть интерфейс (IMenuCommand) и есть dll, которая содержит классы реализующие этот интерфейс(ну либо без dll просто реализация этого интерфейса в каком-нибудь модуле), без создания экземпляров и тд. В исходных данных есть только интерфейс и эта dll(либо модуль, но с библиотекой поинтереснее). Нам необходимо получить все классы из этой библиотеке, реализующие данный интерфейс и создать на каждый экземпляр. В C# выглядело бы примерно так: Код:
var types = GetType().Assembly.GetTypes().Where(t => typeof(IMenuCommand).IsAssignableFrom(t) && !t.IsAbstract).ToList(); foreach (var item in types) { var cmd = Activator.CreateInstance(item); } Заранее спасибо MAD: пользуемся тегами, или бан. Последний раз редактировалось M.A.D.M.A.N., 18.01.2014 в 19:06. |
#2
|
||||
|
||||
Не понял вопроса. Насколько знаю, в RTTI Delphi данные хранятся в классах об интерфейсах, но не наоборот. Это означает, что получить список классов, реализующих тот или иной интерфейс, не получится, поскольку точки входа в них растворены где-то в коде.
А в Windows еще до появления .NET существовал механизм COM/ActiveX и понятие библиотеки типов (type library). Библиотека типов может быть как в виде отдельного файла, так и в виде ресурса в DLL. Ее можно импортировать в Delphi, и среда сгенерирует pas-файл с интерфейсами и прочей инфой из библиотеки типов. В COM же не классы создаются как таковые, а вызываются интерфейсы по GUID, в ответ на что сервера (программы или DLL) создают внутри себя объекты, а наружу выдают только запрашиваемые интерфейсы. Короче, советую почитать учебник по COM. Не стоит путать форумы с богадельнями. © Bargest |