我已经开始在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?
答案 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
本身的属性。)