Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wertebereich vererbter Eigenschaft begrenzen (https://www.delphipraxis.net/162044-wertebereich-vererbter-eigenschaft-begrenzen.html)

fuchsle 3. Aug 2011 10:18

Delphi-Version: 2010

Wertebereich vererbter Eigenschaft begrenzen
 
Hallo,

ich arbeite mich gerade noch in Dlphi ein und habe zur Vererbung eine Frage.

Ich habe von einer Klasse mehrer Klassen erfolgreich abgeleitet und arbeite damit.
Nun möchte ich eine gemeinsam verwendete Eigenschaft (Integer) auf einen Bereich von -50 bis 150 einschränken.

Dazu habe ich volgendes in der Methode zur Eigenschaft in der Mutterklasse implementiert.
Die logs werden geschrieben. Nun arbeite ich aber hier mit einem call by value, wie bekomme ich einen call by reference? Denn der Werte "T" wird in der abgeleiteten Klasse nicht verändert.

Oder habe ich einen größeren Denkfehler drin?


Code:
procedure tClimaModel.setTSet(T: Double);
begin
  if T < -50 then
  begin
    T := -50;
    logthis('Error: TSet out of range (min)');
  end
  else if T > 150 then
  begin
    T := 150;
    logthis('Error: TSet out of range (max)');
  end;
end;
Vielen Dank für eure Hilfe.

himitsu 3. Aug 2011 10:36

AW: Wertebereich vererbter Eigenschaft begrenzen
 
Natürlich kannst du so den wert nicht ändern ... ohne Zugriff auf die Variable.

Aber du mußt doch sowieso irgendwie die überschriebene Methode des Vorfahren aufrufen und dort gibst du dann den angepaßten Wert weiter.

Delphi-Quellcode:
procedure tClimaModel.setTSet(T: Double);
begin
  if T < -50 then
  begin
    T := -50;
    logthis('Error: TSet out of range (min)');
  end
  else if T > 150 then
  begin
    T := 150;
    logthis('Error: TSet out of range (max)');
  end;
  inherited; // oder  inherited setTSet(T);
end;
oder falls das Logging nicht nötig ist:
Delphi-Quellcode:
procedure tClimaModel.setTSet(T: Double);
begin
  inherited setTSet(Min(Max(T, -50), 150);
end;
Du hast doch mit virtual und override überschrieben?

CCRDude 4. Aug 2011 11:21

AW: Wertebereich vererbter Eigenschaft begrenzen
 
Moment mal, die Funktien bearbeitet doch nur einen übergebenen Parameter. Ich glaube, wir sollten hier weit vor der Vererbungsproblematik ansetzen, nämlich:

Delphi-Quellcode:
procedure tClimaModel.setTSet(var T: Double);

fuchsle 4. Aug 2011 15:13

AW: Wertebereich vererbter Eigenschaft begrenzen
 
Zitat:

Zitat von CCRDude (Beitrag 1115039)
Moment mal, die Funktien bearbeitet doch nur einen übergebenen Parameter. Ich glaube, wir sollten hier weit vor der Vererbungsproblematik ansetzen, nämlich:

Delphi-Quellcode:
procedure tClimaModel.setTSet(var T: Double);

Was ändere ich durch das var?
Den Aufruf von Call by Value zu Call by Reference?
Oder was genau bewirkt var an dieser Stelle?

DeddyH 4. Aug 2011 15:26

AW: Wertebereich vererbter Eigenschaft begrenzen
 
Zitat:

Zitat von fuchsle (Beitrag 1115092)
Was ändere ich durch das var?
Den Aufruf von Call by Value zu Call by Reference?

Exakt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz