Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Null als Property

  Alt 8. Apr 2021, 13:24
Ja da habe ich mich auch schon gefragt was daraus geworden ist. Das sollte doch glaube ich in 10.3 (oder sogar schon in 10.2.x) eingeführt werden und wurde dann kurzfristig wieder rausgenommen. Leider hat man seit da nichts mehr dazu gelesen. Mich würde schon auch interessieren wie es damit weiter geht oder ob das komplett gestorben ist. Hatte aber selber auch noch garnie den Bedarf dafür, weil man das auch anders lösen kann.

An den OP: Wieso definierst du denn nicht einfach, dass 0 kein gültiger Wert ist, also genau das was du ja schreibst. Wenn Stärke2 = 0 ist entspricht das deinem Null. Beim setzen des Property Achse prüfst du den Wert von Stärke2 und änderst den Wert von Achse (das Klassenfeld FAchse) nur wenn Stärke2 <> 0 ist. Mit einem SetAchse/GetAchse des Proberties kannst du das problemlos umsetzen. Die Achse initialiserst du natürlcih mit ienem ungültigen Wert wie z.B. -1, was dann für die Achse dem Null entsprechen würde.

Delphi-Quellcode:
type
  TMyObject = class
  private
    FAchse: Integer;
    FStaerke1,
    FStaerke2: Double;
    procedure SetAchse(AValue: Double);
    function GetAchse: Double;
  public
    constructor Create; virtual;
    property Achse: Double read GetAchse write SetAchse;
    property Staerke1: Double read FStaerke1 write FStaerke1;
    property Staerke2: Double read FStaerke2 write FStaerke2;
  end;

constructor TMyObject.Create;
begin
  FAchse := -1;
  // Staerke1 + 2 werden vom Compiler mit 0 initialisiert
end;

function TMyObject.GetAchse: Double;
begin
  if FStaerke2 <> 0 then
    Result := .... // deine Achsenberechnung
  else
    Result = -1; // oder eine Exception auslösen je nach Bedarf
end;

procedure TMyObject.SetAchse(AValue: Double);
begin
  // hier kanns du irgendwas machen, was beim setzen des Achse Properties passieren soll.
  // z.B. überprüfen ob der Wert einem gültigen Wert für Achse entspricht.
end;

Geändert von Rolf Frei ( 8. Apr 2021 um 14:30 Uhr)
  Mit Zitat antworten Zitat