Delphi 遍历类中的属性

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,TypInfo; type TForm1 = class(TForm) Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; {$M+} //如果不用 {$M+} 则需要继承TPersistent TTest = class(TObject) public FName,FSex,FScholl:string; published property Name :string read FName write FName; property Sex :string read FSex write FSex; property Scholl :string read FScholl write FScholl; end; {$M-} var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); var PropCount, I: SmallInt; PropList: PPropList; PropStr,sValues: string; AClass:TTest; AStrings:TStrings; begin AStrings:=TStrings.Create; AClass:=TTest.Create; AClass.Name:='MyTest'; AClass.Sex:='Male'; AClass.Scholl:='Scholl'; PropCount := GetTypeData(AClass.ClassInfo).PropCount; GetPropList(AClass.ClassInfo, PropList); for I := 0 to PropCount - 1 do begin case PropList[I]^.PropType^.Kind of tkClass : PropStr := '[Class] '; tkMethod : PropStr := '[Method]'; tkSet : PropStr := '[Set] '; tkEnumeration: PropStr := '[Enum] '; else PropStr := '[Field] '; end; PropStr := PropStr + PropList[I]^.Name; PropStr := PropStr + ': ' + PropList[I]^.PropType^.Name; sValues:=GetPropValue(AClass,PropList[I].Name,True); ShowMessage(sValues); ShowMessage(PropStr); end; FreeMem(PropList); end; end.