![]() |
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:
er sagt mir zwar gemäß showMessage('jetzt folgt die falsche Methode:') und dann folgt die Fehlermeldung
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; 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. |
AW: Override von Konstanten im Objekt - Alternative?
Das ist jetzt aber weniger der Polizist, sondern der bereits erwähnte Zufall.
|
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? |
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:
Man könnte im Constructor ggf. die Konstante anpassen. Der Ansatz von Uwe Raabe mit strict private const finde ich aber auch sauberer.
procedure Run;
const {$J+} C: Integer = 0; {$J-} begin Inc (C); // ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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-2025 by Thomas Breitkreuz