Con il nuovo RTTI esteso in Delphi 2010, un'applicazione Delphi (in fase di esecuzione) può creare un elenco di tutte le classi che implementano una determinata interfaccia?Enumerare tutte le classi Delphi che implementano una determinata interfaccia?
8
A
risposta
20
Tecnicamente sì, purché l'interfaccia disponga di un GUID e le classi a cui tieni siano nelle sezioni di interfaccia delle unità.
L'unità RTTI non ha (ancora) un'API per descrivere tutte le interfacce implementate da una classe, ma i dati sono nel tipo di informazioni.
Il 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 di tipo istanza può quindi essere controllato con TClass.GetInterfaceEntry(IID)
- se rinvia non -nil, la classe implementa l'interfaccia.
Tutte le classi dichiarate nelle sezioni di interfaccia delle unità possono essere recuperate tramite TRttiContext.GetTypes
.
La scrittura dell'iterazione e del codice di estrazione viene lasciata come esercizio per il lettore.