Guten Tag,
ich habe hier ein strukturelles Problem:
Delphi-Quellcode:
type
TRundesObjekt = class
Radius: Integer;
Beschreibung: String;
procedure Kollidieren; virtual; abstract;
End;
TBall = class(TRundesObjekt)
AnzahlDerNaehte: Integer;
procedure Kollidieren; override;
End;
TKartoffel = class(TRundesObjekt)
MitSchale: Boolean;
procedure Kollidieren; override;
End;
TSack<T: TRundesObjekt> = class
Material: String;
Inhalt: TArray<T>;
procedure Leeren;
End;
TSackFuellerModel<T: TRundesObjekt> = class
MSack: TSack<T>;
End;
TSackFuellerAdapter<T: TRundesObjekt> = class
private
Model: TSackFuellerModel<T>;
End;
implementation
procedure TSack<T>.Leeren;
begin
SetLength(Inhalt, 0);
end;
procedure TBall.Kollidieren;
begin
DoSoftMagic();
end;
procedure TKartoffel.Kollidieren;
begin
DoHardMagic();
end;
Das Problem kriege ich aber beim Erstellen, wo ich ja die Generische Kette runter alles in Abhaengigkeit von entweder TBall oder TKartoffel generiere:
SackFuellerAdapter := TSackFuellerAdapter<TBall>.Create;
-> Inkompatible Typen: SackFueller.TSackFuellerAdapter<TRundesObjekt> und SackFueller.TSackFuellAdapter<TBall>
Wenn ich mit
SackFuellerAdapter := TSackFuellerAdapter<TRundesObjekt>.Create;
erstelle, ist es doch gar nicht spezifiziert auf TBall oder TKartoffel?
Irgendwie denke ich da gerade falsch. Es muss sich doch alles aufgrund des angegebenen Typen einstellen, daher sollte ich ihn beim obersten Create doch explizit angeben, oder wie/wo soll sich sonst ergeben, welche jeweiligen Versionen (TBall- oder TKartoffel-Prozeduren etc.) dann verwendet werden?
Danke fuers Lesen.