Czy istnieje sposób na iterowanie zmiennych składowych obiektu w D2010 bez wcześniejszej wiedzy o tym, co jest przed nimi?Zmienne członów Iterate
Odpowiedz
Tak, jeśli używasz Delphi 2010 lub nowszego. Możesz użyć rozszerzonego RTTI, aby uzyskać informacje o polach, metodach i właściwości obiektu. Prosta wersja:
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;
Niezbędne obiekty można znaleźć w jednostce RTTI
.
We wcześniejszych wersjach Delphi istnieje bardziej ograniczony RTTI, który może dostarczyć informacji o niektórych właściwościach i metodach, ale nie może zrobić tak wiele.
Czy metody/pola/właściwości muszą być "opublikowane" czy mogą być normalne? –
@John: Domyślnie dla wszystkich pól generowane jest rozszerzone RTTI oraz właściwości i metody "public" lub "published". Można to zmienić w kodzie, który piszesz, używając dyrektywy kompilującej '{$ RTTI}', ale jest dość zapiekanka dla standardowych bibliotek, chyba że używasz ich zmodyfikowanych wersji. (Który jest możliwy, ale oficjalnie zniechęcony przez Embarcadero.) –
Hmm, Borland był bardzo przyjazny dla odbudowy RTL, czy ostatnio zmienili politykę? –
- 1. ICU iterate codepoints
- 2. Counter wewnątrz pętli iterate smarty
- 3. Iterate nad obiektem w ES6
- 4. Programowo programuje ClosedXML iterate Worksheets.
- 5. Iterate tablicą, n przedmiotów naraz
- 6. Niestandardowe nazewnictwo proguard dla klas, członów i parametrów zaciemnianie
- 7. Iterate nad obiektem za „publiczne” atrybuty
- 8. Iterate pomiędzy każdym wejściu do sprawdzania wartości
- 9. Iterate Doktryna Collection sortowane według jakiejś dziedzinie
- 10. ArrayList płytka kopia iterate lub klon()
- 11. Iterate parami za pomocą tablicy ruby
- 12. <c: foreach jsp iterate over list
- 13. Bash - zmienne zmienne
- 14. Zmienne Zmienne w JS
- 15. Jquery zmienne zmienne
- 16. Czy Java obsługuje zmienne zmienne?
- 17. (println (iterate inc 0)): dlaczego to nawet rozpoczyna drukowanie?
- 18. C# Iterate Over DataGridView i zmień kolor wiersza
- 19. „zmienna” zmienne „to” zmienne i „globalne” zmienne - Wewnątrz JavaScript Konstruktora
- 20. Zmienne zmienne (kategoryczne i numeryczne) funkcja odległości
- 21. Objective-C, zmienne składowe i zmienne klasy
- 22. Buforowanie zmienne
- 23. eclipse.ini zmienne
- 24. Który jest szybszy? Stałe, zmienne lub zmienne tablice
- 25. Czy zmienne bambusowe są automatycznie dostępne jako zmienne środowiskowe?
- 26. Pobieranie zawartości za pomocą wyciągu (zmienne $), ale zmienne są niezdefiniowane.
- 27. Czy konieczne jest zmienne zmienne pętli zakresu w CFScript?
- 28. Jak przekonwertować zmienne łańcuchowe na zmienne numeryczne w Stata?
- 29. Jak zidentyfikować zmienne zdefiniowane na nowo lub zmienne w tle
- 30. Wątki Java: czy wszystkie zmienne współdzielone powinny być zmienne?
której wersji delphi używasz? – RRUZ
Używam Delphi 2010. –