Delphi 泛型

Delphi 中的泛型及其应用

  1. 前言

    或许不知道“泛型”的同学,可能也听说过“模板”或者“参数多态”,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属性

 

posted @ 2023-01-19 14:42  ZPip  阅读(280)  评论(0)    收藏  举报