2010-12-17 6 views
5

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

+0

quelle version de Delphi utilisez-vous? – RRUZ

+0

J'utilise Delphi 2010. –

Répondre

2

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.

+0

Les méthodes/champs/propriétés doivent-ils être «publiés» ou peuvent-ils être normaux? –

+0

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

+0

Hmm, Borland était plutôt amical envers la reconstruction de RTL, a-t-il changé de politique récemment? –

Questions connexes