Delphi 2009 中的泛型


本文整理自网络,侵删。

 


代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TArr<T> = array[0..9] of T; {定义一个泛型数组}
  {虽然大家习惯用 T 来泛指其他类型, 但使用其他合法的标识符也是可以的}

{用作 Integer}
procedure TForm1.Button1Click(Sender: TObject);
var
  Arr: TArr<Integer>;
  i: Integer;
begin
  for i := Low(Arr) to High(Arr) do
    Arr[i] := i * i;

  Memo1.Clear;
  for i := Low(Arr) to High(Arr) do
    Memo1.Lines.Add(Format('Arr[%d] = %d', [i, Arr[i]]));
end;

{用作 string}
procedure TForm1.Button2Click(Sender: TObject);
var
  Arr: TArr<string>;
  i: Integer;
begin
  for i := Low(Arr) to High(Arr) do
    Arr[i] := StringOfChar(Char(i+97), 3);

  Memo1.Clear;
  for i := Low(Arr) to High(Arr) do
    Memo1.Lines.Add(Format('Arr[%d] = %s', [i, Arr[i]]));
end;

{用作 Single}
procedure TForm1.Button3Click(Sender: TObject);
var
  Arr: TArr<Single>;
  i: Integer;
begin
  for i := Low(Arr) to High(Arr) do
    Arr[i] := 100 / (i+1);

  Memo1.Clear;
  for i := Low(Arr) to High(Arr) do
    Memo1.Lines.Add(Format('Arr[%d] = %f', [i, Arr[i]]));
end;

{用作记录 TPoint}
procedure TForm1.Button4Click(Sender: TObject);
var
  Arr: TArr<TPoint>;
  i: Integer;
begin
  for i := Low(Arr) to High(Arr) do
    Arr[i] := Point(i, i*2);

  Memo1.Clear;
  for i := Low(Arr) to High(Arr) do
    Memo1.Lines.Add(Format('Arr[%d] = (%d,%d)', [i, Arr[i].X, Arr[i].Y]));
end;

{用作类 TButton}
procedure TForm1.Button5Click(Sender: TObject);
var
  Arr: TArr<TButton>;
  i: Integer;
begin
  for i := Low(Arr) to High(Arr) do
  begin
    Arr[i] := TButton.Create(Self);
    Arr[i].Name := Concat('Btn', IntToStr(i+1));
  end;

  Memo1.Clear;
  for i := Low(Arr) to High(Arr) do
    Memo1.Lines.Add(Format('Arr[%d] is %s', [i, Arr[i].Name]));

  for i := Low(Arr) to High(Arr) do Arr[i].Free;
end;

end.

相关阅读 >>

Delphi 调用golang dll

Delphi 提高进程自身权限

Delphi 共享内存的应用

Delphi memo 字符串换行

Delphi xe 7 mediaplayer 在安卓里放不出声音

Delphi 得到不同平台的录音文件保存路径

Delphi firedac数据库引擎连接mysql

Delphi messagebox 和 messagedlg用法

Delphi内存对齐

扩展 Delphi 线程 使之传递参数.(给匿名线程增加参数)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...