{$MODE OBJFPC}{$LONGSTRINGS ON}
uses
FGL;
type
TCustomItem = class(TObject)
public
Name: String;
end;
type
TOrange = class(TCustomItem);
TBanana = class(TCustomItem);
type
TCustomItemClass = class of TCustomItem;
type
TItems = specialize TFPGObjectList<TCustomItem>;
function CreateItem(AClass: TCustomItemClass; const AName: String): TCustomItem;
begin
Result := AClass.Create();
Result.Name := AName;
end;
var
Items: TItems;
Item: TCustomItem;
begin
Items := TItems.Create();
try
Items.Add(CreateItem(TOrange, 'orange'));
Items.Add(CreateItem(TBanana, 'banana'));
Items.Add(CreateItem(TCustomItem, 'custom'));
for Item in Items do
WriteLn(Item.Name);
finally
Items.Free();
end;
end.
eyRNT0RFIE9CSkZQQ317JExPTkdTVFJJTkdTIE9OfQoKdXNlcwogIEZHTDsKCnR5cGUKICBUQ3VzdG9tSXRlbSA9IGNsYXNzKFRPYmplY3QpCiAgcHVibGljCiAgICBOYW1lOiBTdHJpbmc7CiAgZW5kOwoKdHlwZQogIFRPcmFuZ2UgPSBjbGFzcyhUQ3VzdG9tSXRlbSk7CiAgVEJhbmFuYSA9IGNsYXNzKFRDdXN0b21JdGVtKTsKCnR5cGUKICBUQ3VzdG9tSXRlbUNsYXNzID0gY2xhc3Mgb2YgVEN1c3RvbUl0ZW07Cgp0eXBlCiAgVEl0ZW1zID0gc3BlY2lhbGl6ZSBURlBHT2JqZWN0TGlzdDxUQ3VzdG9tSXRlbT47CgogIGZ1bmN0aW9uIENyZWF0ZUl0ZW0oQUNsYXNzOiBUQ3VzdG9tSXRlbUNsYXNzOyBjb25zdCBBTmFtZTogU3RyaW5nKTogVEN1c3RvbUl0ZW07CiAgYmVnaW4KICAgIFJlc3VsdCA6PSBBQ2xhc3MuQ3JlYXRlKCk7CiAgICBSZXN1bHQuTmFtZSA6PSBBTmFtZTsKICBlbmQ7Cgp2YXIKICBJdGVtczogVEl0ZW1zOwogIEl0ZW06IFRDdXN0b21JdGVtOwpiZWdpbgogIEl0ZW1zIDo9IFRJdGVtcy5DcmVhdGUoKTsKICB0cnkKICAgIEl0ZW1zLkFkZChDcmVhdGVJdGVtKFRPcmFuZ2UsICdvcmFuZ2UnKSk7CiAgICBJdGVtcy5BZGQoQ3JlYXRlSXRlbShUQmFuYW5hLCAnYmFuYW5hJykpOwogICAgSXRlbXMuQWRkKENyZWF0ZUl0ZW0oVEN1c3RvbUl0ZW0sICdjdXN0b20nKSk7CgogICAgZm9yIEl0ZW0gaW4gSXRlbXMgZG8KICAgICAgV3JpdGVMbihJdGVtLk5hbWUpOwogIGZpbmFsbHkKICAgIEl0ZW1zLkZyZWUoKTsKICBlbmQ7CmVuZC4K