三十、详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack
生活随笔
收集整理的這篇文章主要介紹了
三十、详测 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.
?
轉載于:https://www.cnblogs.com/jxgxy/archive/2009/11/11/1600938.html
總結
以上是生活随笔為你收集整理的三十、详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单实现分行输出的javascript代
- 下一篇: 程序员结婚晚回家怕出轨吗?老婆:不怕,老