Domanda

Con la nuova estesa RTTI in Delphi 2010 possono un'applicazione Delphi (in fase di esecuzione) costruire una lista di tutte le classi che implementano una data interfaccia?

È stato utile?

Soluzione

Tecnicamente sì, a condizione che l'interfaccia ha un GUID e le classi che ti interessano sono in sezioni di interfaccia delle unità.

L'unità RTTI non ha (ancora) hanno un'API per descrivere tutte le interfacce che implementa una classe, ma i dati è in informazioni tipo.

GUID per un tipo di interfaccia può essere ottenuto da questa espressione:

GetTypeData(TypeInfo(ITheInterface))^.Guid

o

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

La classe del tipo di istanza possono poi essere verificata con TClass.GetInterfaceEntry(IID) - se restituisce non-nil, la classe implementa l'interfaccia

.

Tutte le classi dichiarate nelle sezioni di interfaccia di unità possono essere recuperati tramite TRttiContext.GetTypes.

Scrittura del codice iterazione e l'estrazione effettiva viene lasciata come esercizio per il lettore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top