TCollection.Add实际上是否添加?

时间:2014-02-20 01:06:25

标签: delphi

我已经开始在Delphi XE中使用TCollection类,我发现Using TOwnedCollection descendant in Delphi的答案是一个很好的起点。 TCollection管理TCollectionItems列表。但是我注意到TCollection.Add似乎没有向Collections数组添加TCollectionItem,事实上我的测试似乎证实了这一点。 TCollection本身的代码是:

function TCollection.Add: TCollectionItem;
begin
  Result := FItemClass.Create(Self);
  Added(Result);
end; 

FItemClass是将要创建的对象类型,我想添加到TCollection对象中。不推荐使用Added()方法,它似乎是一种旧的通知方法。我在任何地方都看不到将结果添加到集合中。如何将TCollectionItem添加到TCollection?

1 个答案:

答案 0 :(得分:5)

TCollectionItem.Create(Collection: TCollection)调用TCollectionItem.SetCollection,将项目添加到Collection

procedure TCollectionItem.SetCollection(Value: TCollection);
begin
  if FCollection <> Value then
  begin
    if FCollection <> nil then FCollection.RemoveItem(Self);
    if Value <> nil then Value.InsertItem(Self);
  end;
end;

它被称为TCollection.Add因为它创建了集合项,而项目构造函数将该项添加到包含集合中。所以TCollection.Add确实创建了项目(在过程中将项目添加到自身),并返回对新创建项目的引用。 (您使用该引用来设置TCollectionItem本身的属性。)