Einzelnen Beitrag anzeigen

tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#1

Frage zum Indexer - Verständnisprobleme

  Alt 13. Nov 2008, 22:44
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:
   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;
Jetzt kann ich mit einer for schleife auf die Objekte zugreifen (angenommen, meine Klasse hätte die Variablen "Name" und "Bezeichnung"):

Delphi-Quellcode:
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;
Und jetzt kommt meine Frage. Eher zufällig bin ich drauf gekommen, dass man statt

Tables.Items[I].Name auch

TODBCTable(Tables[I]).Name schreiben kann, also ohne den "Umweg" über "Items" nehmen zu müssen.
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 ?

Tables[I].Name
  Mit Zitat antworten Zitat