Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
6. Sep 2004
Klar, wenn man beide Klassen neu erstellt, ist das der beste Weg.
Allerdings geht das eben nicht, wenn man eine schon bestehende Klasse hat, die man erweitern will.
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
6. Sep 2004
Ich hab dir mal ein kleines Beispiel zusammengebastelt:
{...}
type
TKnoten = class
FZahl: Integer;
public
property Zahl: Integer read FZahl write FZahl;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
6. Sep 2004
Wenn du das auf meine Aussage beziehst - ich meinte damit, bzw ich ging von Folgendem aus:
Du hast die Klasse TMyList mit Wurzel als TKnoten vorgegeben und kannst oder darfst sie nicht mehr im Design verändern.
Du möchtest davon eine Klasse ableiten, die aber Knoten als TNewKnoten implementiert.
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
Nein, so war das nicht gemeint!!! :oops: Ich fand's nur witzig, weil mir das noch nachträglich eingefallen ist und ich dann den Beitrag nochmal editiert hab. Und in diesem Moment kam dein Post. :wink:
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
Ja, sicher, ich bin aber davon ausgegangen, dass er von TMyList ableiten möchte ohne dass er dort irgendwas ändert und trotzdem auch das Wurzel-Objekt eine vom alten Wurzel-Objekt abgeleitete Klasse hat!
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
WAAAS??? Das Wurzel-Objekt ist doch bereits erstellt und du kannst es doch nicht einfach überschreiben!!! Was passiert denn dann, wenn die Mutterklasse auf das Teil zugreift? Deshalb hab ich doch gesagt, man muss die alten Werte erst retten!
P.S.: Ein virtual abstract in der abstrakten Klasse erspart dir das schreiben einer Dummy-Methode! ;-)
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
:gruebel: *sichanschließ*
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
Mit runtercasten meinte ich auf den Vorfahren casten. :)
Wenn du wie im ersten Beispiel castest, dann gibt's ne Zugriffsverletztung, wenn die Klassen nicht stimmen, aber bei unserem Beispiel braucht ja nix überprüft werden, denn wir wissen ja, was für Klassen wir haben.
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
Ja, aber immer nur noch als TKnoten-Objekt!!
Du musst folgendes bedenken, wenn eine Methode aus TMyList aufgerufen wird und auf Wurzel zugegriffen wird, dann ist das ein TKnoten-Objekt, ist die Methode aber in der TMyNewList, dann ist Wurzel ein TNewKnoten-Objekt, beides sind unterschiedliche und unabhängige Objekte. Du könntest natürlich versuchen, das neue Wurzel-Objekt über eine Property...
Forum: Object-Pascal / Delphi-Language
Delphi
by Stevie,
3. Sep 2004
Da TMyList nur TKnoten kennt, musst du der Prozedur eine "runtergecastete" Instanz von TMyKnoten übergeben -->
TMyList = class
private
Wurzel: TKnoten;
public
procedure Hinzufuegen(var Neu: TKnoten);
{...}
end;
TMyNewList = class(TMyList)