Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Override von Konstanten im Objekt - Alternative? (https://www.delphipraxis.net/194709-override-von-konstanten-im-objekt-alternative.html)

EdAdvokat 26. Dez 2017 13:15

AW: Override von Konstanten im Objekt - Alternative?
 
so nun habe ich mir selbst einen Polizisten an die Kreuzung gestellt und jetzt pfeift er kräftig:
Delphi-Quellcode:
var ObjectA:TObjectA;
begin
  ObjectA := TObjectA.Create;
  try
    lblA.Caption:=ObjectA.testvalue;
    //ObjectA.MachWasMitTestValue;
  finally
    ObjectA.Free;
  end;
  ShowMessage('jetzt folgt die falsche aufgerufene Methode:');
  ObjectA.MachWasMitTestValue;
end;
er sagt mir zwar gemäß showMessage('jetzt folgt die falsche Methode:') und dann folgt die Fehlermeldung

Zugriffsverletzung bei Adresse 005FB878 in Modul 'PTest.exe'. Lesen von Adresse 00000000.
Also nun ist die Welt wieder rund und der Hinweis vom schönen Günter ist eingetroffen.

Uwe Raabe 26. Dez 2017 13:19

AW: Override von Konstanten im Objekt - Alternative?
 
Das ist jetzt aber weniger der Polizist, sondern der bereits erwähnte Zufall.

Der schöne Günther 26. Dez 2017 21:23

AW: Override von Konstanten im Objekt - Alternative?
 
Na aber damit dass FastMM schon hätte warnen sollen hat er ja Recht.

"Warnen" ist vielleicht nicht das richtige Wort, es kommt ja (leider!) keine Compiler-Warnung sondern erst zur Laufzeit löst FastMM eine Exception aus - Wenn man es denn so eingestellt hat. Ist das standardmäßig in FastMM nicht so?

Nathan 30. Dez 2017 08:18

AW: Override von Konstanten im Objekt - Alternative?
 
Vielleicht hilft es was. Mit der Compiler-Direktive {$J+} kann man festlegen, ob typisierte Konstanten geändert werden können.
Delphi-Quellcode:
procedure Run;
const
  {$J+} C: Integer = 0; {$J-}
begin
  Inc (C);
  // ...
end;
Man könnte im Constructor ggf. die Konstante anpassen. Der Ansatz von Uwe Raabe mit strict private const finde ich aber auch sauberer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz