Existe-t-il un moyen d'itérer les variables membres d'un objet dans D2010 sans savoir ce qu'elles sont au préalable?Variables de membre d'itération
Répondre
Oui, si vous utilisez Delphi 2010 ou version ultérieure. Vous pouvez utiliser RTTI étendu pour obtenir des informations sur les champs, les méthodes et les propriétés d'un objet. version simple:
procedure GetInfo(obj: TObject);
var
context: TRttiContext;
rType: TRttiType;
field: TRttiField;
method: TRttiMethod;
prop: TRttiProperty;
begin
context := TRttiContext.Create;
rType := context.GetType(obj.ClassType);
for field in rType.GetFields do
;//do something here
for method in rType.GetMethods do
;//do something here
for prop in rType.GetProperties do
;//do something here
end;
Les objets nécessaires se trouvent dans l'unité RTTI
. Dans les versions antérieures de Delphi, il y a quelques RTTI plus limitées qui peuvent vous fournir des informations sur certaines propriétés et méthodes, mais elles ne peuvent pas tout faire.
Les méthodes/champs/propriétés doivent-ils être «publiés» ou peuvent-ils être normaux? –
@John: Par défaut, RTTI étendu est généré pour tous les champs et les propriétés et méthodes 'public' ou' public'. Cela peut être changé dans le code que vous écrivez à l'aide de la directive du compilateur '{$ RTTI}', mais il est plutôt utilisé pour les bibliothèques standard, sauf si vous utilisez des versions modifiées. (Ce qui est possible, mais officiellement découragé par Embarcadero.) –
Hmm, Borland était plutôt amical envers la reconstruction de RTL, a-t-il changé de politique récemment? –
- 1. Variables de membre statique du débogueur Xcode
- 2. variables de membre mutables statiques en C++?
- 3. Types de variables nullable - membre .value
- 4. C#, membre et la portée des variables
- 5. Dois-je initialiser des variables de membre de classe simples?
- 6. Variables de membre de classe C++ Réinitialisation après la boucle?
- 7. Paralléliser une classe avec des variables de membre statiques
- 8. Variables de membre privées dans les documents Java
- 9. Obtenir la sous-chaîne du membre de données variables smarty
- 10. Avantages/Inconvénients d'un héritage, composition et plusieurs variables de membre
- 11. C++: variable de membre statique
- 12. C++: comment une fonction membre statique publique peut-elle accéder à des variables de membre d'instance privée?
- 13. Membre reçoit un membre: octroi de points
- 14. Mutex membre de la classe
- 15. Stockage hétérogène de variables de membre de paramètres de classe variadique
- 16. C# Norme: justification de «Ne pas fournir de variables de membre d'événements publics»?
- 17. Problème lors de l'accès aux variables const statiques via les fonctions de membre de classe
- 18. Saisie de données dans une structure avec des variables de membre de pointeur
- 19. Ajout de méthodes privées mais pas de variables de membre privé dans Javadoc
- 20. Comment tester la méthode void qui modifie uniquement les variables de membre de classe privées?
- 21. Les variables de membre de l'objet d'action Drools ne sont pas définies
- 22. Accès aux variables membres de la boîte de dialogue MFC dans la fonction non membre
- 23. plusieurs threads-impossible d'accéder aux variables de membre de classe définies par le constructeur
- 24. Objective-C, variables membres et variables de classe
- 25. Portée dans la fonction de membre HTML5
- 26. Méthode efficace pour vérifier l'objet pour les variables de membre null?
- 27. Comment foreach à travers une partie d'un objet variables de membre qui sont des tableaux?
- 28. Membre C++ vs opérateur non-membre +
- 29. membre de Constant
- 30. Url.Action est membre de ..?
quelle version de Delphi utilisez-vous? – RRUZ
J'utilise Delphi 2010. –