![]() |
Frage zum Indexer - Verständnisprobleme
Frage zum Indexer - Verständnisprobleme
Hallo zusammen in einer TObjectList speichere ich besitmmte Objekte. Damit ich nicht beim Zugriff auf diese Liste nicht jedes mal ein Typecast machen muss, habe ich die Setter- und Getter-Methode so überlagert, dass sie direkt das richtige Objekt liefert.
Delphi-Quellcode:
Jetzt kann ich mit einer for schleife auf die Objekte zugreifen (angenommen, meine Klasse hätte die Variablen "Name" und "Bezeichnung"):
TODBCTableList = class(TObjectList)
private function GetItem(AIndex: Integer): TODBCTable; procedure SetItem(AIndex: Integer; AValue: TODBCTable); public property Items[AIndex : Integer]: TODBCTable read GetItem write SetItem; end; (...) function TODBCTableList.GetItem(AIndex: Integer): TODBCTable; begin Result := TODBCTable(inherited Items[AIndex]); end; procedure TODBCTableList.SetItem(AIndex: Integer; AValue: TODBCTable); begin inherited Items[AIndex] := AValue; end;
Delphi-Quellcode:
Und jetzt kommt meine Frage. Eher zufällig bin ich drauf gekommen, dass man statt
Tables := TODBCTableList.Create;
(...) // "Tables" füllen for I := 0 to Tables.Count - 1 do begin Memo1.Lines.Add(Tables.Items[I].Name); Memo1.Lines.Add(Tables.Items[I].Bezeichnung); end;
Delphi-Quellcode:
auch
Tables.Items[I].Name
Delphi-Quellcode:
schreiben kann, also ohne den "Umweg" über "Items" nehmen zu müssen.
TODBCTable(Tables[I]).Name
Warum geht das ? Das sieht aus wie eine art namenloser Indexer. Ich habe mir die Klasse TObjectList als auch TList (von der TObjectList abgeleitet wurde) angeschaut und natürlich nichts derartiges gefunden. Aber wenn es schon so funktioniert, kann ich dann dafür auch "meinen" Objekt-Typ als Rückgabewert erzwingen, damit ich auch die gekürzte Schreibweise ohne Typecast nutzen kann ?
Delphi-Quellcode:
Tables[I].Name
|
Re: Frage zum Indexer - Verständnisprobleme
Sollte doch gehen,
schau doch mal deine definition an
Delphi-Quellcode:
cu
property Items[AIndex : Integer]: TODBCTable
Oliver |
Re: Frage zum Indexer - Verständnisprobleme
Ja, der Rückgabewert ist ja auch ein TODBCTable-Objekt, wenn ich über "Items" gehe. Aber das ist ja nicht mein Problem.
Die Definition
Delphi-Quellcode:
sagt doch aus, dass ich
property Items[AIndex : Integer]: TODBCTable
Delphi-Quellcode:
schreiben muss, um als Rückgabewert ein TODBCTable-Objekt zu erhalten.
TODBCTableList.Items[Index]
Ich würde aber gerne
Delphi-Quellcode:
schreiben.
TODBCTableList[Index]
Das funkioniert aber nur mit Typecast, also so:
Delphi-Quellcode:
/Thomas
TODBCTable(TODBCTableList[Index])
|
Re: Frage zum Indexer - Verständnisprobleme
Zitat:
Delphi-Quellcode:
property Items[AIndex : Integer]: TODBCTable read GetItem write SetItem; default;
|
Re: Frage zum Indexer - Verständnisprobleme
Mensch, da tippe ich soviel Text und die Antwort ist dann ein Einzeiler :D
Danke, so klappt es wunderbar - wieder mal was dazu gelernt. Damit ist die Frage beantwortet. /Thomas |
Re: Frage zum Indexer - Verständnisprobleme
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz