Synkende fra TObjectList

En nyttig metode for å implementere en klasse bestemt versjon av TObjectList med ut behovet for alle disse type casts.Here er en enkel metode for synkende fra TObjectList å fjerne behovet for type casting når tilgang til sine gjenstander. Dette er selvfølgelig bare egnet hvis du bare lagrer en klasse type.Not veldig spesiell kode, men det kan spare deg litt tid med å skrive i alle disse type Casts (eller glemme å i mitt tilfelle;-). Jeg bruker denne metoden til å implementere disse enkle men irriterende klasserelasjoner som et tre eller der en klasse trenger å opprettholde en liste over another.egParentObj - TMyParent | ChildObj - TMyClass | ... ParentObj inneholder en liste over ChildObjs - som vist i del below.This kan utvides slik at ParentObj har en tilhørende objektliste også, eller du kan ønske å gå den andre veien, slik at ChildObj inneholder en liste over en annen klasse av objekter og så videre for det imidlertid mange nivåer av objektene du require.Another nytte av å bruke TObjectList er at du ikke trenger å bekymre deg for å frigjøre alle disse objektene, er alt du trenger å gjøre gratis på ObjectList kommer og listen over gjenstander som finnes er frigjort (forutsatt at du satt OwnObjects å true i Opprette (OwnsObjects: boolsk) Eksempel Kode:
typen TMyClassList = klasse (TObjectList); TMyParent = klasse (TObject) private fChildren:. TMyClassList; ... offentlig .. . end; TMyClass = klasse (TObject) private ... offentlig ... end; TMyClassList = klasse (TObjectList) private funksjons GetItems (Index: Integer): TMyClass; prosedyre SetItems (indeks: Integer; verdi: TMyClass); offentlig konstruktør Lag; //Merk at TMyClass erstatter TObject. (Se contnrs.pas). //Dette vil selvsagt fjerne muligheten til å lagre alle slags klasse avledet fra TObject bare de av TMyClass. funksjonen Legg til (verdi: TMyClass): Integer; funksjon IndexOf (verdi: TMyClass): Integer; Prosedyren Sett (indeks: Integer; verdi: TMyClass); funksjon Slett (verdi: TMyClass): Integer; eiendoms Elementer [indeks: Integer]: TMyClass lese GetItems skrive SetItems; misligholde; //Plus din egen kode som trengs dvs. FindByName osv ... enden, implementationconstructor Lag, begynner //Jeg har lagt dette fordi jeg alltid vil at listen skal eier sine gjenstander. arvet Opprette (true); end; funksjon TMyClassList.Add (verdi: TMyClass): Integer; begynne Resultat: = arvet Legg til (verdi); end; funksjons TMyClassList.GetItems (indeks: heltall): TMyClass; begynne //AHHA dette er at pesky en som setter typen kaster i hundre //forskjellige steder gjennom koden din;-) .. Hmm ett sted, mye //bedre. Resultat: = TMyClass (arvet Elementer [Indeks]); end; funksjon TMyClassList.IndexOf (verdi: TMyClass): Integer, begynner Resultat: = arvet IndexOf (verdi); end; prosedyre TMyClassList.Insert (indeks: Integer; verdi: TMyClass ), begynner arvet Sett (indeks, verdi); end; funksjon TMyClassList.Remove (verdi: TMyClass): Integer; begynne Resultat: = arvet Slett (verdi); end; prosedyre TMyClassList.SetItems (indeks: Integer; verdi: TMyClass); begynne arvet Elementer [Indeks]: = verdi; end;