一、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..9of 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.

 

窗体文件:

 

object Form1: TForm1
  Left 
= 0
  Top 
= 0
  Caption 
= 'Form1'
  ClientHeight 
= 158
  ClientWidth 
= 232
  Color 
= clBtnFace
  Font.Charset 
= DEFAULT_CHARSET
  Font.Color 
= clWindowText
  Font.Height 
= -11
  Font.Name 
= 'Tahoma'
  Font.Style 
= []
  OldCreateOrder 
= False
  PixelsPerInch 
= 96
  TextHeight 
= 13
  
object Button1: TButton
    Left 
= 136
    Top 
= 6
    Width 
= 75
    Height 
= 25
    Caption 
= 'Button1'
    TabOrder 
= 0
    OnClick 
= Button1Click
  
end
  
object Memo1: TMemo
    Left 
= 0
    Top 
= 0
    Width 
= 113
    Height 
= 158
    Align 
= alLeft
    Lines.Strings 
= (
      
'Memo1')
    ScrollBars 
= ssVertical
    TabOrder 
= 1
    ExplicitHeight 
= 167
  
end
  
object Button2: TButton
    Left 
= 136
    Top 
= 36
    Width 
= 75
    Height 
= 25
    Caption 
= 'Button2'
    TabOrder 
= 2
    OnClick 
= Button2Click
  
end
  
object Button3: TButton
    Left 
= 136
    Top 
= 66
    Width 
= 75
    Height 
= 25
    Caption 
= 'Button3'
    TabOrder 
= 3
    OnClick 
= Button3Click
  
end
  
object Button4: TButton
    Left 
= 136
    Top 
= 96
    Width 
= 75
    Height 
= 25
    Caption 
= 'Button4'
    TabOrder 
= 4
    OnClick 
= Button4Click
  
end
  
object Button5: TButton
    Left 
= 136
    Top 
= 126
    Width 
= 75
    Height 
= 25
    Caption 
= 'Button5'
    TabOrder 
= 5
    OnClick 
= Button5Click
  
end
end

 

posted on 2009-11-03 10:54  jxgxy  阅读(1269)  评论(0编辑  收藏  举报

导航