AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi "Unbekannter Bezeichner" bei Eigenschaft eines Objektes
Thema durchsuchen
Ansicht
Themen-Optionen

"Unbekannter Bezeichner" bei Eigenschaft eines Objektes

Ein Thema von BillieJoe90 · begonnen am 14. Okt 2006 · letzter Beitrag vom 14. Okt 2006
Antwort Antwort
bttb930

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

Re: "Unbekannter Bezeichner" bei Eigenschaft eines

  Alt 14. Okt 2006, 11: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz