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.
Problemi correlati
- 1. Come trovare tutte le classi che implementano una determinata interfaccia?
- 2. Ninject legano tutte le classi che implementano la stessa interfaccia
- 3. Tieni traccia di tutte le classi che implementano una particolare interfaccia?
- 4. Istanziare tutte le classi che implementano un'interfaccia specifica
- 5. Come trovare tutte le classi che implementano IDisposable?
- 6. Trovare tutte le classi che implementano un'interfaccia specifica
- 7. stesso metodo per più classi che implementano la stessa interfaccia
- 8. Come enumerare tutte le classi con attributo di classe personalizzato?
- 9. JAXB - classi generate implementano l'interfaccia
- 10. Java: loop su tutte le classi nel classpath
- 11. Verificare se struct implementa una determinata interfaccia
- 12. Elenca tutte le classi che ereditano da una classe/interfaccia specifica
- 13. Ottieni tutte le classi che implementano un tratto in Scala utilizzando la riflessione
- 14. Gestione di valori di enum da enumerazioni diverse che implementano una determinata interfaccia in uno switch/caso
- 15. Come evitare di scrivere test di unità duplicati per classi che implementano la stessa interfaccia?
- 16. Service e DAO implementano sempre le interfacce
- 17. Ottieni un elenco di tutte le classi attualmente caricate in una determinata istanza JVM
- 18. Esistono classi standard Java che implementano Iterable senza implementare Collection?
- 19. Carica tutte le funzioni in PowerShell da una determinata directory
- 20. Come elencare tutte le classi sul percorso classe che implementa un determinato insieme di interfacce
- 21. PHP: come ottenere un elenco di classi che implementano determinate interfacce?
- 22. Casting tra le classi che condividono la stessa interfaccia
- 23. Perché il metodo Object clone() è disponibile solo per le classi che implementano l'interfaccia Cloneable?
- 24. Enumerare tutte le k-partizioni dell'array 1d con N elementi?
- 25. enumerare tutte le applicazioni installate sul OS X
- 26. In che modo le rotaie implementano before_filter?
- 27. Utilizzo di LINQ con classi che implementano ICollection non generico
- 28. Codice per enumerare le permutazioni in Scala
- 29. Come enumerare tutte le finestre all'interno di un processo?
- 30. come è possibile utilizzare il per-ogni ciclo per le classi che non implementano Iterable