D2010でオブジェクトのメンバー変数を反復する方法はありますか?メンバー変数を反復する
答えて
はい、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がいくつかありますが、そのすべてを行うことはできません。
メソッド/フィールド/プロパティは 'published'する必要がありますか? –
@ John:デフォルトでは、拡張RTTIはすべてのフィールドと 'public'または' published'プロパティとメソッドに対して生成されます。これは、 '{$ RTTI}'コンパイラ指令を使って記述したコードで変更することができますが、変更されたバージョンを使用していない限り、標準ライブラリに対してかなり焼き付けられています。 (可能ですが、正式にEmbarcaderoによって落胆しました) –
ボランはRTLの再構築にかなり親切でしたが、最近ポリシーを変更しましたか? –
- 1. JSF/Richfaces反復の反復スコープ変数?
- 2. for-EachObjectループ反復変数の問題
- 3. 反復子を返す関数を "適切な反復可能な"反復関数に変換する標準的な方法は?
- 4. Ruby - ループを反復しながら変数を保護する
- 5. 反復ブロックのコードを関数に変換する方法
- 6. else if条件内で変数を反復するか?
- 7. ループで角度$スコープ変数を反復する方法
- 8. Bashスクリプト - 連想配列のリストの変数 "変数"を反復する
- 9. 非同期関数を反復する
- 10. 複数のデータテーブルを反復する
- 11. 複数のファイルアップロードフィールドを反復する
- 12. Ruby:定数を反復する
- 13. PL/pgSQLで整数[]を反復する
- 14. は追加メンバーを反復では、ここでのPowerShell
- 15. 変更コンテナの反復
- 16. C++プリプロセッサ:メンバ変数リストのコード反復を避ける
- 17. コレクションを反復し、結果を変数に入れますか?
- 18. 非反復乱数配列
- 19. 'For Each' VB.NET反復回数
- 20. 反復しない乱数
- 21. JSONレスポンスを反復して結果を変数に取得
- 22. BSTの反復型対反復型ソリューション
- 23. jqueryを使用した複雑なjavascript変数の反復
- 24. 反復
- 25. 反復++
- 26. 反復
- 27. 反復
- 28. 反復
- 29. 反復
- 30. 色を反復する
どのバージョンのデルファイを使用していますか? – RRUZ
私はDelphi 2010を使用しています。 –