Question

Avec la nouvelle extension RTTI Delphi 2010, une application peut Delphi (au moment de l'exécution) construire une liste de toutes les classes qui mettent en œuvre une interface donnée?

Était-ce utile?

La solution

Techniquement oui, tant que l'interface a un GUID et les classes que vous aimez sont dans les sections d'interface d'unités.

L'unité RTTI ne fonctionne pas (encore) une API pour décrire toutes les interfaces qui une classe implémente, mais les données sont dans les informations de type.

peut être obtenu Le GUID pour un type d'interface de cette expression:

GetTypeData(TypeInfo(ITheInterface))^.Guid

ou

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

La classe du type d'instance peut alors être vérifiée à l'aide TClass.GetInterfaceEntry(IID) - si elle renvoie une valeur non nulle, la classe implémente l'interface

.

Toutes les classes déclarées dans les sections d'interface d'unités peuvent être récupérées via TRttiContext.GetTypes.

Ecriture du code d'itération réelle et l'extraction est laissé comme un exercice pour le lecteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top