![]() |
Delphi-Version: XE2
Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Hallo-
Übersehe ich etwas? Viele meiner Objekte haben Dinge, die einmal im Konstruktor festgelegt werden und sich danach nicht mehr ändern sollen und rein logisch auch nicht können. Konkretes Beispiel:
Delphi-Quellcode:
- Das Haus soll eine Konstante auf Instanzebene haben die im Konstruktor initialisiert wird.
THaus.Create(hausNummer:UInt16)
Natürlich kann ich es einfach später nicht mehr ändern - Aber da kriege ich Schlafstörungen. Dann gibt es noch den Compilerschalter J+ mit dem ich grundsätzlich Konstanten überall neu beschreiben kann, aber das ist doch Wahnsinn. Was tun? (Wahrscheinlich ist das wieder eine der Fragen die alle paar Monate hier auftauchen, aber ich finde nichts...) |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Wieso Konstante?
Für mich sieht das nach einer Read-Only-Property aus :gruebel: BTW: alles steht ja irgendwie, irgendwo im Speicher ... als flüchtig und beschreibbar, somit kann alles auf die eine oder andere Art auch überschrieben werden ... einen Schutz gibt es nicht ... gut wenn du dir einen WORM-RAM-Speicher dafür einbaust :mrgreen: |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
In .NET gibts dafür Readonly-Member.
In Delphi könnte das doch über ein (strict) private field in einer Basisklasse gehen, für das es einen protected Property-Accessor (nur read, kein write) gibt. In jeder Ableitung kannst Du dann nur noch lesend über das Property zugreifen, und es nicht mehr ändern. |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Danke für die Antworten.
Nur mit Properties unterbinde ich nicht, dass jemand hingeht und in anderen Instanzmethoden (versehentlich) das eigentliche Feld umbriegt, da hilft auch ein
Delphi-Quellcode:
nicht gegen.
strict private
|
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
hi,
vielleicht versteh ich das Problem nicht, aber wie soll hier jemand in einer abgeleiteten Klasse auf das Private Feld zugreifen:
Delphi-Quellcode:
oder auch umbiegen? Einzig das Property kann man öffentlich machen, ändert aber nichts am Zugriffsschutz (readOnly). In wie weit über die neue RTTI hier auf private Felder zugegriffen werden kann weiß ich allerdings nicht.
TTestBasis = class(TObject)
strict private FTestfeld: Integer; strict protected property TestFeld: Integer read FTestfeld; public constructor create(ATest: INteger); end; |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Zitat:
Ist das schon zu paranoid? Ich fand es in bsp. Java oder C++ eigentlich immer ganz schön, einmal eine Konstante im Konstruktor setzen zu können und mir dann sicher zu sein dass danach nie wieder jemand dran rütteln kann... |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Zitat:
Ich kenne Java/c++ nicht so genau - aber auch wenn du das dort als Konstante definiert hast: was hindert jemand das zu ändern, wenn er deinen kompletten Source hat? Grüße |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Das wäre ja schon reine Zerstörungswut :lol:
Mir ging es eher darum, dass jemand nicht aus Versehen später etwas ändert, was sich rein logisch nicht ändern kann. Wie beispielsweise die Adresse auf die ein Gerät antworten soll. |
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Zitat:
|
AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können
Zitat:
Ich finde auch, man sollte nur hinreichend intelligente Programmierer an die Sourcen lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 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