Hier mein erster Post und gleich 'ne Frage
Hallöle, ich habe ein Problem (wahrscheinlich allgemeines Verständnis) bei Klassen mit Delphi.
Ich habe das ganze mal ins Tierreich abstrahiert, um es leichter verständlich zu machen.
Ich habe jetzt also ne Klasse Katze, Tier und Hund, wobei Katze und Hund von Tier erben.
Quelltext
1: 2: 3: 4: 5:
| var Tier:TTier; begin Tier:=TKatze.Create; //funktioniert end; |
Jetzt wollte ich eine Klasse Tieransammlung kreieren und dabei auf ObjectLists verzichten (Delphi 4).
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| TTierAnsammlung=class private FTiere:Array of TTier; function GetTier(ind:Integer):TTier; procedure SetTier(ind:Integer;tier_:TTier); public property Tiere[ind:Integer]:TTier read GetTier write SetTier; end;
implementation
function TTieransammlung.GetTier(ind:Integer); begin if Length(FTiere)>ind then Result:=FTier[ind] else begin Result:=nil; end; end;
procedure TTieransammlung.SetTier(ind:Integer;tier_:TTier); begin if ind<Length(FTiere) then begin SetLength(FTiere,ind+1); FTiere[ind]:=TTier.Create; end; end; |
Jetzt funktioniert folgendes nicht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var tieransammlung:TTieransammlung; begin tieransammlung.Tiere[0]:=TKatze.Create; //bis hierhin sagt er nix
ShowMessage(tieransammlung.Tiere[0].Classname);
{gibt TTieransammlung aus, hier sollte doch aber TKatze ausgegeben werden :? Demzufolge komme ich auch nicht an die Eigenschaften von TKatze ran}
//Selbst:
(Tieransammlung.Tier[0] as TKatze).beine:=5;
//liefert mit einen Invalid Class Typecast
end; |
Vielleicht wißt ihr ja, was ich hier falsch mache.
(Meine Abschlußprüfung rückt in schreckliche Nähe

)
Danke euch schonmal.
Fingolfin
Moderiert von
Klabautermann: Code-Tags hinzugefügt.