有没有办法在事先不知道它们是什么的情况下迭代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可以获得关于某些属性和方法的一些信息,但它不能做太多。
方法/领域/属性必须是“发布”或他们可以正常? – 2010-12-17 00:44:32
@John:默认情况下,为所有字段和'public'或'published'属性和方法生成扩展RTTI。这可以在您使用'{$ RTTI}'编译器指令编写的代码中进行更改,但除非使用它们的修改版本,否则对于标准库而言它已经非常适合了。 (这是可能的,但Embarcadero正式劝阻。) – 2010-12-17 00:56:57
嗯,Borland对RTL重建非常友好,他们最近是否改变了策略? – 2010-12-17 01:34:17
- 1. 你如何迭代对象的成员变量?
- 2. 启用Python类通过内部迭代成员变量
- 3. 如何迭代类成员?
- 4. python迭代成多个变量
- 5. 变量名迭代
- 6. 替代C中的成员变量
- 7. R:通过迭代变量
- 8. 索引变量迭代器
- 9. 如何迭代变量?
- 10. 批迭代FOR/F变量
- 11. 如何迭代变量?
- 12. 访问一成不变的方法,而迭代一个可变成员
- 13. 通过迭代结构成员
- 14. C++:迭代所有对象的成员?
- 15. 迭代器“指向”对象的成员
- 16. 通过迭代更改类成员
- 17. C# - 迭代和调用类成员
- 18. 成员集合迭代线程安全
- 19. 变量是一样的成员变量
- 20. C++ STL向量迭代器访问对象的成员
- 21. 成员变量继承
- 22. 使用成员变量
- 23. fstream类成员变量
- 24. 绑定到成员变量
- 25. 任意成员变量
- 26. 基于成员变量
- 27. 抽象的成员变量
- 28. 约ThreadPoolExecutor的成员变量
- 29. 覆盖类成员变量
- 30. 捕获成员变量值
您使用的是哪个版本的delphi? – RRUZ 2010-12-17 00:25:32
我正在使用德尔福2010年。 – 2010-12-17 00:30:00