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.
分类:
使用泛型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧