Einzelnen Beitrag anzeigen

LucasL

Registriert seit: 20. Dez 2005
19 Beiträge
 
#1

Komposition ähnlicher Objekte; Prozeduraufruf ohne "as

  Alt 7. Dez 2006, 21:37
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
  Mit Zitat antworten Zitat