程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi 2009泛型容器單元(Generics.Collections)[5]: TObject...<T> 系列

Delphi 2009泛型容器單元(Generics.Collections)[5]: TObject...<T> 系列

編輯:Delphi

已經有了: TList<T>、TQueue<T>、TStack<T>、TDictionary<TKey,TValue>

為什麼還有: TObjectList<T>、TObjectQueue<T>、TObjectStack<T>、TObjectDictionary<TKey,TValue> ?

還記得 Classes.TList 和 Contnrs.TObjectList 的主要區別嗎?

如果元素是對象, Contnrs.TObjectList 在刪除元素時會同時釋放對象, 而 Classes.TList 不會.

同樣在這裡, Generics.Collections.TObjectList<T> 會同時釋放對象, 而 Generics.Collections.TList<T> 不會.

其他也是一樣.

還是要做個例子測試一下: 本例效果圖:

代碼文件:unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;
type
 TForm1 = class(TForm)
  Panel1: TPanel;
  Panel2: TPanel;
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  Button4: TButton;
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  procedure Button4Click(Sender: TObject);
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
uses Generics.Collections;
var
 List  : TList<TButton>;    {譬如要管理 TButton 對象}
 ObjList : TObjectList<TButton>;
procedure TForm1.FormCreate(Sender: TObject);
begin
 List := TList<TButton>.Create;
 ObjList := TObjectList<TButton>.Create;
 Button1.Caption := '創建 Button 並添加到 TList';
 Button2.Caption := '刪除 TList 中的 Button';
 Button3.Caption := '創建 Button 並添加到 TObjectList';
 Button4.Caption := '刪除 TObjectList 中的 Button';
 Button2.Enabled := False;
 Button4.Enabled := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
 List.Free;
 ObjList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 btn: TButton;
begin
 btn := TButton.Create(Self);
 btn.Caption := 'TList 中的 Button';
 btn.Parent := Panel1;
 btn.Width := 132;
 List.Add(btn);
 Button1.Enabled := False;
 Button2.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 List.RemoveAt(0);
 Button1.Enabled := True;
 Button2.Enabled := False;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
 btn: TButton;
begin
 btn := TButton.Create(Self);
 btn.Caption := 'TObjectList 中的 Button';
 btn.Parent := Panel2;
 btn.Width := 132;
 ObjList.Add(btn);
 Button3.Enabled := False;
 Button4.Enabled := True;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
 ObjList.RemoveAt(0);
 Button3.Enabled := True;
 Button4.Enabled := False;
end;
end.

窗體文件:

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = 'Form1'
 ClientHeight = 153
 ClientWidth = 408
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 OnDestroy = FormDestroy
 PixelsPerInch = 96
 TextHeight = 13
 object Panel1: TPanel
  Left = 8
  Top = 8
  Width = 193
  Height = 137
  Caption = 'Panel1'
  TabOrder = 0
  object Button1: TButton
   Left = 8
   Top = 76
   Width = 177
   Height = 25
   Caption = 'Button1'
   TabOrder = 0
   OnClick = Button1Click
  end
  object Button2: TButton
   Left = 8
   Top = 107
   Width = 177
   Height = 25
   Caption = 'Button2'
   TabOrder = 1
   OnClick = Button2Click
  end
 end
 object Panel2: TPanel
  Left = 207
  Top = 8
  Width = 194
  Height = 137
  Caption = 'Panel2'
  TabOrder = 1
  object Button3: TButton
   Left = 8
   Top = 76
   Width = 177
   Height = 25
   Caption = 'Button3'
   TabOrder = 0
   OnClick = Button3Click
  end
  object Button4: TButton
   Left = 8
   Top = 107
   Width = 177
   Height = 25
   Caption = 'Button4'
   TabOrder = 1
   OnClick = Button4Click
  end
 end
end

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved