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.