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