Hallo Luckie,
habe mir gerade mal Deinen Entwurf von der Methode
Button1Click angesehen. Was hältst Du davon, wenn Du auch gleich das Schlüsselwort
class, also das Konzept der Klassenreferenzen aka Metaklassen einführt (muss ja nicht unbedingt mit virtuellen Konstruktoren sein)? Dann ließe sich Dein Code wesentlich eleganter (<- da haben wir's wieder, Achtung, jetzt keine Tippfehler
) lösen:
Delphi-Quellcode:
type
TFruitClass = class of TFruit;
function GetFruitClassByInt(const AnInt: Integer): TFruitClass;
begin
case AnInt of
0: Result:= TLemon;
1: Result:= TGrapeFruit;
2: Result:= TBanana;
else
raise EInvalidClassSelector.CreateFmt(..., [AnInt]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
myFruit: TFruit;
begin
myFruit:= GetFruitClassByInt(RadioGroup1.ItemIndex).Create;
try
ShowMessage(Format('Tastes really %s', [myFruit.GetTaste]);
if myFruit is TCitrusFruit then
(MyFruit as TCitrusFruit).Squeeze;
finally
myFruit.Free;
end;
end;