delphi 类 线程 反射 泛型 简单理解

  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;

 

posted @ 2019-03-15 11:21  夏天的西瓜君  阅读(627)  评论(0编辑  收藏  举报