![]() |
AW: Zugriff auf Unterklasse absichern
Zitat:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Math; var Res: Integer; function GiveDecision: Boolean; begin Writeln('GiveDecision'); Result := Boolean(RandomRange(0, 1)); end; function GiveFive: Integer; begin Writeln('GiveFive'); Result := 5; end; function GiveFour: Integer; begin Writeln('GiveFour'); Result := 4; end; begin try Res := IfThen(GiveDecision, GiveFive, GiveFour); Writeln('Res: ' + Res.ToString); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: Zugriff auf Unterklasse absichern
Da es ja hier um einen String geht, dürfte das IfThen aus StrUtils gemeint sein:
Zitat:
[edit] Nee, Denkfehler, es wird ja trotzdem darauf zugegriffen. [/edit] |
AW: Zugriff auf Unterklasse absichern
Es wird ja schon beim Übergeben an die Funktion ausgewertet, da kracht es schon :|
|
AW: Zugriff auf Unterklasse absichern
Japp, siehe mein Edit.
|
AW: Zugriff auf Unterklasse absichern
Zitat:
|
AW: Zugriff auf Unterklasse absichern
Zitat:
Delphi-Quellcode:
Der Aufruf sähe dann so aus:
function IfThen(AValue: Boolean; const ATrueFunc: TFunc<String>;
AFalse: string = ''): string; begin if AValue then Result := ATrueFunc() else Result := AFalse; end;
Delphi-Quellcode:
IfThen(Assigned(Analyse.Method), function: String begin Result := Analyse.Method.Name end);
Und da diese Schreibweise ein wenig aufwendig ist, kann man auch gleich bei
Delphi-Quellcode:
bleiben.
if Assigned(Analyse.Method) then
Label1.Caption := Analyse.Method.Name; |
AW: Zugriff auf Unterklasse absichern
Zitat:
Könnte man sich höchstens mit anonymen Methoden noch was zusammenbasteln:
Delphi-Quellcode:
oder falls ausreichend auch:
class function TTernaryOp.Execute<T>(Condition: Boolean; const ATrue, AFalse: TFunc<T>): T;
begin if Condition then begin Result := ATrue; end else begin Result := AFalse; end; end;
Delphi-Quellcode:
Ist natürlich alles nicht wirklich schön.
class function TTernaryOp.Execute<T>(Condition: Boolean; const ATrue: TFunc<T>; const AFalse: T): T;
Edit: Roter Kasten? |
AW: Zugriff auf Unterklasse absichern
Ich will auch noch meinen Senf dazu geben :-D
Man kann dem Property Name in
Delphi-Quellcode:
auch einen smarten Getter verpassen, dann spart man sich das Null-Objekt:
TMethode
Delphi-Quellcode:
type
TMethode = class private FName: String; function GetName: String; public property Name: String read GetName write FName; end; function TMethode.GetName: String; begin if (Self = nil) then Exit(''); Result := FName; end; |
AW: Zugriff auf Unterklasse absichern
Zitat:
Delphi-Quellcode:
class function TMethode.CreateNullObject: TMethode;
begin Result := TMethode.Create; end; Zitat:
Vielen Dank Gerd |
AW: Zugriff auf Unterklasse absichern
IfThen ist zwar eine Inline-Funktion und da "könnte" der Compiler das theoretisch so optimieren, dass nur der jeweilige Parameter erst später aufgelöst wird, aber das tut der leider nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz