Pergunta

Com o novo RTTI estendido em Delphi 2010, um aplicativo Delphi (em tempo de execução) pode criar uma lista de todas as classes que implementam uma determinada interface?

Foi útil?

Solução

Tecnicamente, sim, desde que a interface tenha um GUID e as classes com as quais você se preocupa estão nas seções de interface das unidades.

A unidade RTTI ainda não possui uma API para descrever todas as interfaces que uma classe implementa, mas os dados estão nas informações do tipo.

O GUID para um tipo de interface pode ser obtido a partir desta expressão:

GetTypeData(TypeInfo(ITheInterface))^.Guid

ou:

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

A classe do tipo de instância pode ser verificada usando TClass.GetInterfaceEntry(IID) - Se retornar não-nil, a classe implementa a interface.

Todas as classes declaradas em seções de interface das unidades podem ser recuperadas via TRttiContext.GetTypes.

Escrever o código de iteração e extração real é deixado como um exercício para o leitor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top