三十、详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack

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 .

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值