¿Hay alguna manera de iterar las variables miembro de un objeto en D2010 sin saber de antemano cuáles son?Variables miembro de iteración
Respuesta
Sí, si utiliza Delphi 2010 o posterior. Puede usar RTTI extendido para obtener información sobre los campos, métodos y propiedades de un objeto. Versión sencilla:
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;
Los objetos necesarios se pueden encontrar en la unidad RTTI
.
En versiones anteriores de Delphi, hay algunos RTTI más limitados que pueden brindarle cierta información sobre algunas propiedades y métodos, pero no pueden hacer tanto.
¿Los métodos/campos/propiedades tienen que ser 'publicados' o pueden ser normales? –
@John: de forma predeterminada, se genera RTTI extendido para todos los campos, y las propiedades y métodos 'public' o' published'. Esto se puede cambiar en el código que se escribe utilizando la directiva de compilación '{$ RTTI}', pero está prácticamente procesado para las bibliotecas estándar, a menos que use versiones modificadas de ellas. (Lo cual es posible, pero oficialmente desanimado por Embarcadero.) –
Hmm, Borland fue muy amable con la reconstrucción de RTL, ¿cambiaron de política recientemente? –
- 1. Variables miembro estáticas protegidas
- 2. Atributos/variables miembro en interfaces?
- 3. Objective-C, variables miembro y variables de clase
- 4. Tipos de variables anulables - miembro .value
- 5. Anulando las variables de miembro en Java
- 6. C# para las variables miembro privadas
- 7. ¿Advertencia sobre la ocultación de variables de miembro?
- 8. Variables de miembro de interfaz Java 8 (prelanzamiento)
- 9. Variables de miembro burlón de una clase usando Mockito
- 10. Meta-programación de plantilla C++, ¿número de variables miembro?
- 11. ¿pueden usarse las funciones miembro para inicializar las variables miembro en una lista de inicialización?
- 12. caracteres de subrayado posteriores para las variables miembro en C++
- 13. Configuración automática variables miembro de clase en Python
- 14. C++ Etiqueta sobre las variables de miembro en el montón
- 15. Ayuda para comparar variables de miembro flotante usando comparadores
- 16. Cambio de fuente para las variables miembro en Visual Studio
- 17. para declarar variables miembro en el montón de C++
- 18. iteración a través de miembros de la estructura
- 19. ¿Cómo expandir variables miembro en Write-Host o comillas dobles?
- 20. ¿Cómo obtener variables miembro estáticas en clases MATLAB?
- 21. ¿Es una buena práctica proteger las variables miembro?
- 22. Marcar el prefijo en las variables miembro. intellisense
- 23. Propagar constness a los datos apuntados por las variables miembro
- 24. ¿Por qué no se pueden compartir las variables miembro?
- 25. Cocoa - Objeto Singleton: ¿Dónde inicializar las variables miembro?
- 26. Android: ¿es eficiente almacenar referencias a Vistas como variables miembro?
- 27. Funciones de miembro constante
- 28. ¿Por qué no puedo establecer las propiedades de las variables de iteración en un ciclo foreach?
- 29. PyMongo - iteración de cursor
- 30. índice de iteración lenguaje
¿qué versión de delphi estás usando? – RRUZ
Estoy usando Delphi 2010. –