2010-12-17 10 views
5

D2010でオブジェクトのメンバー変数を反復する方法はありますか?メンバー変数を反復する

+0

どのバージョンのデルファイを使用していますか? – RRUZ

+0

私はDelphi 2010を使用しています。 –

答えて

2

はい、Delphi 2010以降を使用している場合。拡張RTTIを使用して、オブジェクトのフィールド、メソッド、およびプロパティに関する情報を取得できます。シンプルバージョン:

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; 

必要なオブジェクトはRTTIユニットにあります。

以前のバージョンのDelphiでは、いくつかのプロパティとメソッドについていくつかの情報を得ることができるより限定されたRTTIがいくつかありますが、そのすべてを行うことはできません。

+0

メソッド/フィールド/プロパティは 'published'する必要がありますか? –

+0

@ John:デフォルトでは、拡張RTTIはすべてのフィールドと 'public'または' published'プロパティとメソッドに対して生成されます。これは、 '{$ RTTI}'コンパイラ指令を使って記述したコードで変更することができますが、変更されたバージョンを使用していない限り、標準ライブラリに対してかなり焼き付けられています。 (可能ですが、正式にEmbarcaderoによって落胆しました) –

+0

ボランはRTLの再構築にかなり親切でしたが、最近ポリシーを変更しましたか? –