Перечислить все классы Delphi, которые реализуют данный интерфейс?

StackOverflow https://stackoverflow.com/questions/2214741

Вопрос

С новым расширенным RTTI в Delphi 2010 может ли приложение Delphi (во время выполнения) создать список всех классов, которые реализуют данный интерфейс?

Это было полезно?

Решение

Технически да, при условии, что интерфейс имеет GUID, а классы, о которых вы заботитесь, находятся в разделах интерфейса units .

Модуль RTTI (пока) не имеет API для описания всех интерфейсов, реализуемых классом, но данные содержатся в type info .

Идентификатор GUID для типа интерфейса может быть получен из этого выражения:

GetTypeData(TypeInfo(ITheInterface))^.Guid

или:

ctx: TRttiContext;
// ...
(ctx.GetType(TypeInfo(ITheInterface)) as TRttiInterfaceType).GUID

Затем класс типа экземпляра может быть проверен с помощью TClass.GetInterfaceEntry(IID) - если он возвращает значение, отличное от нуля, класс реализует интерфейс.

Все классы, объявленные в разделах интерфейса модулей, могут быть извлечены через TRttiContext.GetTypes.

Написание фактического кода итерации и извлечения оставлено в качестве упражнения для читателя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top