Hallo ihr,
nachdem
Robert_G hier eine Verwendung eines TObjectList-Descendants mit eigenem Typ erklaert hat, kam immer wieder der Einwand auf, dass so etwas viel zu viel Arbeit sei. Die Implementierung wuerde zu lange dauern usw. Nun, seit heute haben auch diese Gegner von TObjectList (
) einen Grund weniger.
Ich habe mir den Code von Robert_G geschnappt, dazu das Collection-Template von
maximov, und habe eine template-Version dieses TObjectList-Descendants erstellt. Fuer alle die sich mit Templates nicht auskennen:
hier gehts weiter.
Die Verwendung koennte nicht einfacher sein. Ich deklariere mir meine Item-Klasse:
Delphi-Quellcode:
type TMyItemClass = class(TObject)
private
fFoo: String;
fBar: Integer;
published
property Foo: String read fFoo;
property Bar: String read fBar;
end;
Anschliessend deklariere ich mir mein Template:
Delphi-Quellcode:
_LIST_ITEM_ = TMyItemClass;
{$DEFINE TYPED_LIST_TEMPLATE}
{$INCLUDE objlist_tmpl.pas}
TTypedList = _LIST_;
TListItemClass = _LIST_ITEM_CLASS_;
implementation
{$INCLUDE objlist_tmpl.pas}
Jeder der schon mal mit den Collection templates gearbeitet hat, wird dieses Verfahren kennen und auch schaetzen
Anschliessend kann ich ganz normal drauf zugreifen, so wie ich es mit TObject bei einer ObjectList tun kann:
Delphi-Quellcode:
fTypedList := TTypedList.Create;
fTypedList.Add(TListItem.Create);
fTypedList.Add(TListItem.Create);
fTypedList.Add(TListItem.Create);
fTypedList.Add(TListItem.Create);
with fTypedList.GetIEnumerator() do
begin
while MoveNext() do
begin
Current.Foo := 'Bar';
end;
end;
In Delphi 2005 wuerde der letzte Teil natuerlich so aussehn:
Delphi-Quellcode:
for SomeItem in fTypedList do
SomeItem.Foo := 'Bar';
Die Klasse kann natuerlich alles, was TObjectList auch kann, nur mit dem Vorteil dass ich mir saemtliche Typecasts spare, und die Funktionalitaet nicht mehr implementieren muss. Ich muss dem Ding einfach nur noch meine Klasse geben, und fertig
Zum Kompilieren braucht ihr natuerlich die objlist_tmpl.pas sowie die
Jedi-Include-Datei. Ich haenge beides mal hier an, falls ich die
Jedi-Datei hier nicht anhaengen darf sagt es mir, und sie fliegt raus.
Greetz
alcaeus
[edit=Dax]Dämliches Highlighting Mfg, Dax[/edit]