Hallo,
ich würde gerne Objekte, die alle eine bestimmte Prozedur gemeinsam haben, in einer Liste zusammenstellen und dann diese gemeinsame Prozedur z.B. in einem Schleifendurchlauf aufrufen - ohne mich um den genauen Typ kümmern zu müssen. Geht das?
Ich habs mit ner abstrakten Klasse versucht, auf die die Liste zugreifen kann und die dann von allen Objekten implementiert wurde - ohne Erfolg
.
Delphi-Quellcode:
//----------
// renderbares Objekt
//----------
TGLObject = class(TObject)
private
FNext : TGLObject;
public
constructor Create;
procedure Render; virtual; abstract;
end;
//----------
// Liste von renderbaren Objekten
//----------
TGLObjects = class(TObject)
private
FFirst,
FPointer : TGLObject;
public
constructor Create;
procedure Render;
procedure Add(Obj: TGLObject);
procedure Remove;
[...]
end;
[...]
//----------
// Rendern aller in der Liste befindlichen Objekte
//----------
procedure TGLObjects.Render;
var
Obj: TGLObject;
begin
Reset;
while Fetch(Obj) do
Obj.Render;
end;
Obj zeigt auf konkrete, von TGLObject abgeleitete Objekte, die "Render" implementiert haben. Der Compiler versucht jedoch in der while-Schleife der Prozedur Render von TGLObjects (-s!) die abstrakte Prozedur von TGLObject aufzurufen, da Obj ja eine TGLObject-Variable ist... Was aber natürlich zu einem Fehler führt.
Wie kann ich die Schleife simpel halten und trotzdem einen korrekten Prozeduraufruf erzeugen, ohne mich um den genauen Typen von dem jeweiligen Objekt kümmern zu müssen?
Vielen Dank und schönen Gruß,
Lucas