TObjectList<T>、TObjectQueue<T>、TObjectStack<T> 分別繼承自:
TList<T>、TQueue<T>、TStack<T>;
它們是專門用於對象的列表, 都增加了一個 OwnsObjects 布爾屬性, 決定對象會不會自動釋放(這也通過 Create 的參數來決定)
其他基本同它們的父類, 僅給 TObjectList<T> 測試一例(至此泛型相關內容學習完畢):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Generics.Collections;
procedure TForm1.Button1Click(Sender: TObject);
const
w = 100; h = 20;
var
ObjList: TObjectList<TEdit>;
Edit: TEdit;
i: Integer;
begin
ObjList := TObjectList<TEdit>.Create();
//ObjList := TObjectList<TEdit>.Create(False); {如果這樣建立, 對象退出列表是則不會自動釋放}
Randomize;
for i := 0 to 5 do {建立 6 個 Edit, 並加入列表}
begin
Edit := TEdit.Create(Self);
Edit.Parent := Self;
Edit.SetBounds(Random(ClientWidth-w), Random(ClIEntHeight-h), w, h);
ObjList.Add(Edit);
end;
{2 秒鐘後刪除一個}
Sleep(2000);
ObjList.Delete(0);
{2 秒鐘後提取一個, 讓被提取的變紅; 提取的對象不會被自動釋放的}
Sleep(2000);
Edit := ObjList.Extract(ObjList[0]);
Edit.Color := clRed;
Edit.Repaint;
//ObjList.OwnsObjects := False; {如果這樣, 對象退出列表是也不會自動釋放}
{2 秒鐘後銷毀列表; 列表中的對象也會隨之釋放}
Sleep(2000);
ObjList.Free;
end;
end.