程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中的容器類(2)

Delphi中的容器類(2)

編輯:Delphi

TObjectList 類

TObjectList 類直接從TList 類繼承,可以作為對象的容器。TObjectList類定義如下: 

TObjectList = class(TList)
 ...
public
  constructor Create; overload;
  constructor Create(AOwnsObjects: Boolean); overload;
  function Add(AObject: TObject): Integer;
  function Remove(AObject: TObject): Integer;
  function IndexOf(AObject: TObject): Integer;
  function FindInstanceOf(AClass: TClass;
  AExact: Boolean = True; AStartAt: Integer = 0):
  Integer;
  procedure Insert(Index: Integer; AObject: TObject);
  property OwnsObjects: Boolean;
  property Items[Index: Integer]: TObject; default;
end;

不同於TList類,TObjectList類的Add, Remove, IndexOf, Insert等方法都需要傳遞TObject對象作為參數,由於有了編譯期的強類型檢查,使得TObjectList比TList更適合保存對象。此外TObjectList對象有OwnsObjects屬性。當設定為True (默認值),同TList類不同,TObjectList對象將銷毀任何從列表中刪除的對象。無論是調用Delete, Remove, Clear 方法,還是釋放TObjectList對象,都將銷毀列表中的對象。有了TObjectList類,我們就再也不用使用循環來釋放了對象。這就避免了釋放鏈表對象時,由於忘記釋放鏈表中的對象而導致的內存洩漏。另外要注意的是OwnsObjects屬性不會影響到Extract方法,TObjectList的Extract方法行為類似於TList,只是從列表中移除對象引用,而不會銷毀對象。

TObjectList 對象還提供了一個FindInstanceOf 函數,可以返回只有指定對象類型的對象實例在列表中的索引。如果AExact 參數為True,只有指定對象類型的對象實例會被定位,如果AExact 對象為False,AClass 的子類實例也將被定位。AStartAt 參數可以用來找到列表中的多個實例,只要每次調用FindInstanceOf 函數時,將起始索引加1,就可以定位到下一個對象,直到FindInstanceOf 返回-1。下面是代碼示意:

var
 idx: Integer;
begin
 idx := -1;
  repeat
  idx := ObjList.FindInstanceOf(TMyObject, True, idx+1);
   if idx >= 0 then
   ...
  until(idx < 0);
end;

TComponentList 類

Contnrs單元中還定義了TComponentList 類,類定義如下:

TComponentList = class(TObjectList)
 ...
public
  function Add(AComponent: TComponent): Integer;
  function Remove(AComponent: TComponent): Integer;
  function IndexOf(AComponent: TComponent): Integer;
  procedure Insert(Index: Integer; AComponent: TComponent);
  property Items[Index: Integer]: TComponent; default;
end;

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