1 unit Unit3;
2
3 interface
4
5 uses
6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
7 Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Rtti;
8
9 type
10 TForm3 = class(TForm)
11 Button1: TButton;
12 Edit1: TEdit;
13 Button2: TButton;
14 Edit2: TEdit;
15 Button3: TButton;
16 Button4: TButton;
17 procedure Button1Click(Sender: TObject);
18 procedure Button2Click(Sender: TObject);
19 procedure Button3Click(Sender: TObject);
20 procedure Button4Click(Sender: TObject);
21 private
22 { Private declarations }
23 public
24 { Public declarations }
25 end;
26
27 type
28 Tmyclass = class //类
29 public
30 constructor Create(tempname: string); overload;
31 private
32 myname: string;
33 type
34 mytype = (jack, mike, tom);
35 end;
36
37 type
38 Tmythread = class(TThread) //线程
39 protected
40 procedure Execute; override;
41 private
42 procedure myrun;
43 public
44 constructor Create; overload;
45 end;
46
47 type
48 TmyKV<T> = class //泛型
49 private
50 Fkey: string;
51 Fvalue: T;
52 procedure SetFkey(const Value: string);
53 procedure SetFvalue(const Value: T);
54 public
55 property PFkey: string read Fkey write SetFkey;
56 property PFvalue: T read Fvalue write SetFvalue;
57 end;
58
59 var
60 Form3: TForm3;
61
62 implementation
63
64 {$R *.dfm}
65
66 procedure TForm3.Button1Click(Sender: TObject);
67 var
68 my1: Tmyclass;
69 begin
70 my1 := Tmyclass.Create('Jacky');
71 try
72 Edit1.Clear;
73 Edit1.Text := my1.myname;
74 finally
75 my1.Destroy;
76 end;
77 end;
78
79 { Tmyclass }
80
81 constructor Tmyclass.Create(tempname: string);
82 begin
83 inherited Create();
84 myname := tempname;
85 end;
86
87 procedure TForm3.Button2Click(Sender: TObject); //反射
88 var
89 rtx: TRttiContext;
90 rt: TRttiType;
91 f: TRttiField;
92 mycls: Tmyclass;
93 begin
94 mycls := Tmyclass.Create('Tom');
95
96 rt := rtx.GetType(Tmyclass);
97 f := rt.GetField('myname');
98 Edit1.Text := f.GetValue(mycls).AsString;
99 mycls.Free;
100 end;
101
102 procedure TForm3.Button3Click(Sender: TObject); //线程
103 var
104 mythread: Tmythread;
105 begin
106 mythread := Tmythread.Create;
107 mythread.Resume;
108 end;
109
110 procedure TForm3.Button4Click(Sender: TObject); //泛型
111 var
112 myKV: TmyKV<Tmyclass>;
113 myll: Tmyclass;
114 begin
115 myll := Tmyclass.Create('汤姆');
116 myKV := TmyKV<Tmyclass>.Create;
117 myKV.PFkey := 'tom';
118 myKV.PFvalue := myll;
119 Edit2.Text := myKV.PFvalue.myname;
120 myKV.Free;
121 myll.free;
122 end;
123
124 { Tmythread }
125
126 constructor Tmythread.Create;
127 begin
128 inherited;
129 FreeOnTerminate := True;
130 end;
131
132 procedure Tmythread.Execute;
133 begin
134 inherited;
135 myrun;
136 end;
137
138 procedure Tmythread.myrun;
139 var
140 i: Integer;
141 begin
142 for i := 1000 downto 1 do
143 begin
144 form3.Edit1.Text := IntToStr(i);
145 Sleep(500);
146 end;
147
148 end;
149
150 { TmyKV<T> }
151
152 procedure TmyKV<T>.SetFkey(const Value: string);
153 begin
154 Fkey := Value;
155 end;
156
157 procedure TmyKV<T>.SetFvalue(const Value: T);
158 begin
159 Fvalue := Value;
160 end;