Fällt dir nicht selber auf, dass du beim zweiten Aufruf der Funktion zwei sinnlose Parameter mitgeben musst, wo du doch nur einen Wert haben willst?
Und wo wir gerade mal so beim grübeln sind: kommt dir es nicht ein wenig komisch vor, dass Parameter für eine Bedingung sowie einen bedingungspezifischen Wert an eine Property gibst? Wird da nicht selbst ein wenige mulmig, wenn eine Property (ich übersetze nochmal explizit:
Eigenschaft) eine Bedingung enthält, wann sie was übernimmt und die Bedingungsparameter ihr auch noch mitgegeben werden? Meinst du nicht auch, dass dieses lieber ausserhalb der Property gemacht werden sollte?
Delphi-Quellcode:
// SkinConfig
TSkinConfig = class
private
fAeroEmulate : Integer;
public
function ReadConfig: boolean;
property AeroEmulate: integer read fAeroEmulate write fAeroEmulate;
end;
Delphi-Quellcode:
procedure TSkinConfig.ReadConfig;
begin
// aus meiner TextDatei eingelesen
case SkinType of
stAeroEmulate:
begin
fAeroEmulate := StrToInt(ParseThis(sBF, ',', 1));
end;
....
end;
end;
Die Abfrage an sich ist schon hinfällig, da du fest 1 übergibst bei dem Aufruf. Und somit entscheidet allein der Case Zweig, ob die Variable zugewiesen wird oder nicht. Und da wir schon im spezifischen Case Zweig sind, ist die Abfrage sinnlos. Und da die Config eigentlich von der Klasse selbst eingelesen werden sollte, schliesslich hält sie die Config, kann sie direkt den Member setzen.
Und dein SkinEngine kann doch einfach nur die Instanz der TSkinConfig öffentlich anbieten und somit auch nutzen:
Delphi-Quellcode:
// SkinEngine
ESkinException =
class(
Exception);
ESkinConfigError =
class(ESkinException);
TSkinEngine =
class
private
fConfig: TSkinConfig;
public
constructor Create;
destructor Destroy;
override;
property Config: TSkinConfig
read fConfig;
// kein write!!!
end;
Delphi-Quellcode:
constructor TSkinEngine.Create;
begin
inherited;
fConfig := TSkinConfig.Create;
if not fConfig.ReadConfig then
raise ESkinConfigError.Create('Skin Config invalid or not available!');
end;
destructor TSkinEngine.Destroy;
begin
fConfig.Free;
inherited;
end;
Delphi-Quellcode:
// im Code abgefragt
if fConfig.AeroEmulate > 0 then
begin
//
end;