Hi,
Ich hoff mal ich hab auch verstanden worum es geht
. Ich würde es so lösen:
Delphi-Quellcode:
type
TDeviceType = (Device1, Device2);
TDeviceClass = class of TBasicDevice;
TBasicDevice = class(TPersistent)
public
class function GetDeviceClass(DeviceType: TDeviceType): TDeviceClass;
end;
TDevice1 = class(TBasicDevice);
{...}
TDevice2 = class(TBasicDevice);
{...}
implementation
{...}
{ TBasicDevice }
class function TBasicDevice.GetDeviceClass(
DeviceType: TDeviceType): TDeviceClass;
begin
case DeviceType of
Device1: Result := TDevice1;
Device2: Result := TDevice2;
else
Result := nil;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var DeviceClass: TDeviceClass;
SomeDevice: TBasicDevice;
begin
DeviceClass := TBasicDevice.GetDeviceClass(Device1);
If DeviceClass <> nil then
SomeDevice := DeviceClass.Create;
end;
{...}
Wenn du eine neuen Nachkommen hinzufügst, muss die GetDeviceClass Methode aktualisiert werden, aber ich sehe auch keinen Weg, das zu vermeiden, weil du eine Geräte-Klasse aufgrund einer Information (in deinem Pseudocode das "Gerät") identifizieren willst, die selbst keine Klasse ist.
Edit: rethorische Verbrechen entfernt.
Dani H.
At Least I Can Say I Tried