2010-12-17 27 views
5

¿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

+0

¿qué versión de delphi estás usando? – RRUZ

+0

Estoy usando Delphi 2010. –

Respuesta

2

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.

+0

¿Los métodos/campos/propiedades tienen que ser 'publicados' o pueden ser normales? –

+0

@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.) –

+0

Hmm, Borland fue muy amable con la reconstrucción de RTL, ¿cambiaron de política recientemente? –

Cuestiones relacionadas