Con el nuevo RTTI ampliado en Delphi 2010, ¿puede una aplicación Delphi (en tiempo de ejecución) crear una lista de todas las clases que implementan una interfaz determinada?¿Enumerar todas las clases de Delphi que implementan una interfaz determinada?
Respuesta
Técnicamente sí, siempre que la interfaz tenga un GUID y las clases que le interesan se encuentran en las secciones de interfaz de las unidades.
La unidad RTTI no tiene (todavía) una API para describir todas las interfaces que implementa una clase, pero los datos están en la información de tipo.
el GUID de un tipo de interfaz puede ser obtenido a partir 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 -nil, la clase implementa la interfaz.
Todas las clases declaradas en las secciones de interfaz de las unidades pueden recuperarse a través del TRttiContext.GetTypes
.
Escribir el código de iteración y extracción real se deja como un ejercicio para el lector.
- 1. ¿Cómo encontrar todas las clases que implementan una interfaz determinada?
- 2. ¿Cómo puedo hacer un seguimiento de (enumerar) todas las clases que implementan una interfaz?
- 3. ¿Cómo obtengo todas las instancias de todos los tipos cargados que implementan una interfaz determinada?
- 4. Mantenga un registro de todas las clases que implementan una interfaz en particular?
- 5. Prueba de todas las clases que implementan una interfaz en Java
- 6. NUnit - Cómo probar todas las clases que implementan una interfaz particular
- 7. JAXB: las clases generadas implementan la interfaz
- 8. Enumerar todas las clases que heredan de una clase/interfaz específica
- 9. Cómo inyectar dependencias en clases que implementan una interfaz?
- 10. ¿Cómo encontrar todas las clases que implementan IDisposable?
- 11. Eclipse: encuentre todas las clases que extienden la interfaz
- 12. ¿Cómo puedo encontrar qué clases implementan una interfaz determinada en Visual Studio?
- 13. Encontrar todas las clases implementando una interfaz específica
- 14. Inyectar diferentes clases que implementan la misma interfaz utilizando Ninject
- 15. Obtener solo las propiedades que implementan una interfaz
- 16. ¿Cómo puedo evitar escribir pruebas de unidades duplicadas para las clases que implementan la misma interfaz?
- 17. C#: enumerar todas las clases en el ensamblaje
- 18. ¿Hay alguna forma de enumerar todas las llamadas de iguales() de una determinada clase con Eclipse?
- 19. PHP: ¿cómo obtener una lista de clases que implementan cierta interfaz?
- 20. ¿podemos tener main() en una interfaz y diferentes implementaciones para main() en las clases que implementan esta interfaz?
- 21. C# Genéricos: ¿Puedo restringir a un conjunto de clases que no implementan una interfaz?
- 22. ¿Por qué no todas las clases System.Web.UI.WebControl con propiedades de texto implementan ITextControl?
- 23. ¿Por qué deberíamos colocar las interfaces con las clases que las usan en lugar de las que las implementan?
- 24. Obtención de todos los tipos que implementan una interfaz
- 25. Crear una instancia de todas las clases implementando una interfaz específica
- 26. Restringir las clases que pueden implementar una interfaz
- 27. ¿Cómo puedo enumerar todas las clases cargadas en un cargador de clases específico?
- 28. Encontrar todas las clases que heredan una interfaz en Visual Studio
- 29. ¿Reflejando todas las propiedades de una interfaz, incluidas las heredadas?
- 30. ¿Cómo enumerar todas las etiquetas de Git?