详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
涂孟超 发表于3年前
详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
  • 发表于 3年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   


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.

 
 
 
 
 

 

 

  
共有 人打赏支持
粉丝 13
博文 2004
码字总数 14107
×
涂孟超
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: