Zitat von
shmia:
Wenn alle Klassen von einer gemeinsamen Basisklasse abgeleitet wurden,
und diese Basisklasse virtuelle Methoden hat ist das kein Problem.
Ausser eventuell bei
Delphi-Quellcode:
Haus1 := THausA.Create(...);
Haus2 := THausB.Create(...);
Haus3 := THausC.Create(...);
Haus4 := THausD.Create(...);
Da wirds wohl nicht ohne weiteren Aufwand kürzer gehen.... Aber für den Rest ist die Erzeugung einer Basisklasse der richtige Weg:
Delphi-Quellcode:
THaus = class(TObject)
protected
procedure Zeichnen ; virtual ; abstract ;
procedure TuerAuf ; virtual ; abstract ;
procedure TuerZu ; virtual ; abstract ;
end ;
THausA = class(THaus)
public
procedure Zeichnen ; override ;
procedure TuerAuf ; override ;
procedure TuerZu ; override ;
end ;
// THausB usw. analog
implementation
procedure THausA.Zeichnen ;
begin
inherited Zeichnen ;
// Deine Zeichenroutine für Haus A
end ;
// usw.
Die Häuser würd ich dann nicht in einem Array sondern TObjectList ablegen. Dann sieht dein obiger Code verkürzt so aus:
Delphi-Quellcode:
procedure AlleZeichnen ;
var
Haeuser : TObjectList;
begin
HausA := THausA.Create ;
HausB := THausB.Create ;
HausC := THausC.Create ;
HausD := THausD.Create ;
Haeuser := TObjectList.Create ;
Haeuser.Add (HausA) ;
Haeuser.Add (HausB) ;
Haeuser.Add (HausC) ;
Haeuser.Add (HausD) ;
for i := 0 to Haeuser.count-1 do begin
(Haeuser[i] as THaus).Zeichnen ;
(Haeuser[i] as THaus).TuerAuf;
(Haeuser[i] as THaus).TuerZu;
end ;
end ;