Container(容器)是按一种有效方式存储大量items的地方,它通常包括一系列或一套items。Container为items的存储方式赋予了特殊含义。本文的例子包括结构列表、顺序列表、堆栈和队列。
这些container可能不是最常见的,但是如果你知道在哪儿找到它们、如何使用它们的话,那么对于你来讲会非常方便。
在查找DELPHI中特定的container类之前,首先先看一下TList,TList在DELPHI版本1中就已经有了。它能提供存储指针的list,你可以直接把新的items加入到list中,这一点会给你带来很大的方便,而且,由于list只存储指针,所以你不必担心items本身占用内存空间问题(否则,你必须考虑到这一点)。当你释放或破坏list时,你释放的仅仅是存储指针的空间。
但是,TList只能存储指针这一点也是一个问题,除非你提前知道,否则你将无法获知存储的是什么。当你存储所有同类型items(象records)时,并不存在这样的问题,但是,同理,如果存储对象类型不同象TEdits, TButtons, 和Tlabels,就会给你带来许多不便。原因是你要的仅仅是想返回指针。所以就不能使用Run-Time Type Information (RTTI)来获取存储的真正类型。基于这一点,引入了TObjectList。
为了分析和比较DELPHI 6中不同container的用途,我在这里用TEdit, TMemo, 和7个 TButton
components编了一个小的demo。见图A,每个button都能够说明特定collection或container类的特点。同时,这个程序也能够下载。
图A
不同container的功能显示demo
下面的一小段程序是从源程序中摘下来的,它可以生成TList并把items加进去。
TForm1.btnListClick(Sender: TObject)
Var
i: Integer;
List: TList;
Begin
List := TList.Create;
Try
List.Clear;
for i:=0 to Pred(ComponentCount) do
List.Add(Components[i]);
// Usage of List...
finally
List.Free
End
end;
另外还是要注意,因为TList并不支持RTTI,所以如果事先不知道items类型的话,你将无所适从。