![]() |
Verschiedene Klassen in Klasse
Hi!
Ich habe da mal eine Frage und hoffe, ihr könnt mir helfen. Ich versuche mal den Sachverhalt so gut es geht darzustellen: Ich haben ein Klasse TAuto, diese Klasse hat eine Property Fahrer. Jetzt geht es um den Typ dieser Property Fahrer. Momentan ist das eine Klasse TMensch. Allerdings ist diese Klasse für männlich und für weiblich. D.h. ist der Fahrer männlich hat die Klasse trotzdem Eigenschaften, die sie nicht braucht und umgekehrt. Jetzt dachte ich mir, ich leite mir von TMensch 2 weitere Klassen ab: TMann und TFrau. Jetzt weiß ich aber nicht, wie ich die Property Fahrer setzen soll... Ich kann sie ja nicht TMann, aber auch nicht TFrau machen. Gehe ich hin und mache sie TMensch, meckert er, wenn ich eine TFrau zuweise (klar, TFrau hat ja Eigenschaften, die TMensch nicht kennt). Wie kann man sowas lösen? Ciao Frederic |
Re: Verschiedene Klassen in Klasse
Hallo Frederic,
auf die Schnelle versucht:
Delphi-Quellcode:
Anschliessend wird was damit gemacht:
type
TMensch = class(TObject) public Foo: String; end; TMann = class(TMensch) public Bar: String; end; TFrau = class(TMensch) public Bar: Integer; end;
Delphi-Quellcode:
Ich kann dein Problem auch nicht nachvollziehen :gruebel: Laut OOP kannst du einer Objektvariable der Klasse TFoo auch ein Objekt der Klasse TBar zuweisen, solange TBar von TFoo abgeleitet wurde ;)
var
Mann, Frau: TMensch; begin Mann := TMann.Create; Frau := TFrau.Create; try Mann.Foo := 'Mann'; Frau.Foo := 'Frau'; TMann(Mann).Bar := 'Bar'; TFrau(Frau).Bar := 0; finally Mann.Free; Frau.Free; end; end; Greetz alcaeus |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
Ich schiebs mal nach in die Object Pascal-Sparte. Gehoert wohl eher dorthin. |
Re: Verschiedene Klassen in Klasse
Hi!
Ich versuchs mal an meinem Originalbeispiel zu erklären. Ich habe ein Array mit 64 Feldern. Jedes Feld ist vom Typ TField (eigene Klasse). Jedes Feld hat eine Property TPeg (auch eigene Klasse). Jetzt gehe ich hin und leite TPeg ab (neue Klasse: TBauer). Diese hat als zusätzliche Var ein integer Foo. Jetzt sieht mein Code so aus:
Delphi-Quellcode:
Dann sagt er mir:
newBauer:= TBauer.Create;
newBauer.foo:=8; PlayField[i+j+k].peg:=newBauer; Showmessage(inttostr((PlayField[i+j+k].peg as TBauer).foo)); Zitat:
Ciao Frederi |
Re: Verschiedene Klassen in Klasse
Wenn der Cursor nach der Meldung in der 'ShowMessage' Zeile steht, ist der Fehler vielleicht auch in der Zeile davor aufgetreten.
Wenn (Bla.peg as TBauer) illegal ist, dann ist eben peg nicht kompatibel zu TBauer. Dann machst Du was Anderes falsch... Bei deinem Beispiel musst Du aber doch schon wissen, das der peg ein Bauer ist, sonst könntest Du doch seinen Foo nicht anzeigen. |
Re: Verschiedene Klassen in Klasse
Hi!
TBauer ist ja von TPeg abgeleitet. Oder was meinst du? Ciao Frederic |
Re: Verschiedene Klassen in Klasse
Gut, wenn also
A. TBaurer = Class (TPeg) und B. Board.Peg is TPeg dann muss C. (Board.Peg as TBauer) gehen. So einfach ist das. Umkehrschluss: Aus NOT(C)-> not(b) oder not(a). Wenn Delphi jetzt (scheinbar spinnt), dann ist das natürlich zum haareraufen. Aber hier liegt der Fehler mit Sicherheit bei Dir. Was passiert, wenn Du nach dem
Delphi-Quellcode:
die Code-completion mit Ctrl+C aufrufst?
(PlayField[i+j+k].peg as TBauer).
und was passiert bei
Delphi-Quellcode:
???
PlayField[i+j+k].peg.
|
Re: Verschiedene Klassen in Klasse
Hi!
Zu a,b,c: Ja, davon ging ich aus. Nur, wo soll mein Fehler liegen?
Delphi-Quellcode:
hier zeigt er mir das benötigte foo an, meckert aber es wäre ein invalider TypeCast
(PlayField[i+j+k].peg as TBauer).
im anderen Fall zeigt er mir das benötigte foo natürlich nicht an. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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