Delphi 泛型
Delphi 中的泛型及其应用
- 前言
或许不知道“泛型”的同学,可能也听说过“模板”或者“参数多态”,YES,你没有看错,Delphi 中的泛型应用,等同于C++中的模板或Scala中的参数多态(parametric polymorphism),不过这个Scala中的参数多态可不是C++中的参数多态,前者是静态多态,发生在编译时,后者是动态多态,发生在运行时。回归正题,Of course,在JAVA、C#或.NET语言中也叫泛型。不同的语言,使用泛型编程的难易度不同,不过相较于C++来说,Delphi中的泛型编程比它要稍简单一点。Delphi中泛型需要引用Generics.Defaults和Generics.Collections两个单元,不过主要是用后者。
2.Delphi 中个人认为最简单的泛型-泛型数组:TArray泛型类
声明与定义: type TArr<T> = array[0..X] of T
使用: var MyArr1 :TArr<Integer> 或者MyArr2 :TArr<TPoint>
甚至可以将Button放进来 : MyButtonArr :TArry<TButton> , 不过众所周知,button需要Create:
procedure TForm1.Button1Click(Sender: TObject);
var
Arr: TArr<TButton>;// 实例化TButton类数组
i: Integer;
begin
for i := Low(Arr) to High(Arr) do // 遍历数组
begin
Arr[i] := TButton.Create(Self);// TButton的Create
{
do something...
}
end;
for i := Low(Arr) to High(Arr) do // 有创建就要有释放
Arr[i].Free;
end;
3.泛型类-TList<T> 需要引用Generics.Collections单元才能用
直接上代码
uses
Generics.Collections;
var
List: TList<string>;//定义一个泛型 TList 类
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
x : string;
begin
List := TList<string>.Create;//个人感觉与TStringList差别不大,同样也需要创建和释放
{do something ... }
//遍历
for i := 0 to List.Count - 1 do
x = List[i];
// do something ...
//增加、插入
List.Add(x);
button1.click;//模仿点击按钮,相当于刷新了,是一种常见的手法
// do something ...
List.Insert(0, x)// (位置,待插入的string)
//删除
List.Delete(0);//下标删除法
del = List[0];
List.Remove(del); //内容删除法
//排序
List.sort;
//反转List
List.Reverse;
//清空
List.Clear;
//添加数组
arr = Arrary[0,1] of String=("string1","string2");
List.AddRange(arr);
end;
相同的还有TQueue的泛型、TStack的泛型和TDictionary<string,string>,TQueue主要有三个方法一个属性,当然还有其它属性和方法只是不常用了:
Queue.Enqueue();//出队 Queue.Dequeue();//入队 Queue.Peek;//查看下一个要出队的元素 Count属性

浙公网安备 33010602011771号