有沒有辦法在事先不知道它們是什麼的情況下迭代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. 你如何迭代對象的成員變量?
- 3. 如何迭代類成員?
- 4. python迭代成多個變量
- 5. 變量名迭代
- 6. 替代C中的成員變量
- 7. PHP常量成員變量
- 8. 參考成員變量的類成員
- 9. Perl:在重載的等式子集上迭代類成員變量
- 10. 訪問一成不變的方法,而迭代一個可變成員
- 11. 如何迭代變量?
- 12. 迭代變量的名字
- 13. AS3迭代類變量
- 14. R:通過迭代變量
- 15. 索引變量迭代器
- 16. PDO - 迭代綁定變量
- 17. 如何迭代變量?
- 18. 批迭代FOR/F變量
- 19. 通過迭代結構成員
- 20. C++:迭代所有對象的成員?
- 21. 成員集合迭代線程安全
- 22. 迭代通過groovy中的類成員
- 23. C# - 迭代和調用類成員
- 24. 迭代案例類數據成員
- 25. 迭代器「指向」對象的成員
- 26. 作爲類成員的Python迭代器?
- 27. 通過迭代更改類成員
- 28. 變量是一樣的成員變量
- 29. std ::向量迭代器作爲類成員
- 30. 迭代通過向量的所有成員
您使用的是哪個版本的delphi? – RRUZ 2010-12-17 00:25:32
我正在使用德爾福2010年。 – 2010-12-17 00:30:00