Pregunta

Con la nueva RTTI extendida en Delphi 2010, puede una aplicación Delphi (en tiempo de ejecución) construir una lista de todas las clases que implementan una interfaz dada?

¿Fue útil?

Solución

Técnicamente sí, siempre y cuando la interfaz tiene un GUID y las clases que le interesan se encuentran en las secciones de interfaz de unidades.

La unidad de RTTI no (todavía) tiene una API para la descripción de todas las interfaces que implementa una clase, pero los datos se encuentra en la información de tipo.

El GUID para un tipo de interfaz puede ser obtenido de esta expresión:

GetTypeData(TypeInfo(ITheInterface))^.Guid

o

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

La clase del tipo de instancia a continuación, se puede comprobar utilizando TClass.GetInterfaceEntry(IID) - si se devuelve un valor no nulo, la clase implementa la interfaz

.

Todas las clases declaradas en secciones de interfaz de las unidades pueden ser recuperados a través de TRttiContext.GetTypes.

Escribir el código de iteración y extracción real se deja como ejercicio para el lector.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top