Einzelnen Beitrag anzeigen

bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#19

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 12:46
Zitat von BillieJoe90:
Mein Problem ist, dass ich Monopoly programmiere und für jeden Typ von Feld eine eigene Klasse haben möchte, trotzdem die Felder aber per Feld[i] anwählen können möchte.
Wenn mir keiner helfen kann, mache ich es so, dass eine Klasse für alle da ist und je nachdem, was für einen Typ die Instanz hat, reagieren die Methoden... Nicht sonderlich elegant, aber es wird nicht anders gehen...
Na, grundsätzlich kann man das so machen, man muss aber die Arbeit DELEGIEREN! Das heißt:

NICHT je nach Typ dies oder das tun

SONDERN unabhängig vom Typ immer das gleiche tun - das ist aber bei jedem Typ anders deklariert.

Dies machst Du mit virtuellen Methoden:

Delphi-Quellcode:
type
  TPerson = class
  private
    FName: string;
  public
    property Name: string read FName write FName;
  end;

  TCommonField = class
  private
    ...
  public
    procedure Enter(APerson: TPerson); virtual; abstract;
  end;

  TNorthStation = class(TCommonField)
  private
    ...
  public
    procedure Enter(APerson: TPerson); override;
  end;

  TKnast = class(TCommonField)
  private
    ...
  public
    procedure Enter(APerson: TPerson); override;
  end;

...

procedure TNorthStation.Enter(APerson: TPerson);
begin
  ShowMessage(APerson.Name + ' auf Nordbahnhof');
end;

procedure TKnast.Enter(APerson: TPerson);
begin
  ShowMessage(APerson.Name + ' im Knast');
end;

var
  Person1: TPerson;
  Knast: TKnast;
  Nordbahnhof: TNorthStation;
  Feld: TCommonField;
begin
  Person1 := TPerson.Create;
  Person1.Name := 'Billy Joe';
  Knast := TKnast.Create;
  Nordbahnhof := TNorthStation.Create;

  Feld := Knast;
  Feld.Enter(Person1);
  
  Feld := Nordbahnhof;
  Feld.Enter(APerson);
end;
Die beiden Enter-Methoden sind jeweils anders implementiert. In deiner Prozedur bekommst Du ein Field: TCommonField und rufst lediglich Field.Enter(APerson) auf. Fertig.
  Mit Zitat antworten Zitat