AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

Ein Thema von Der schöne Günther · begonnen am 9. Apr 2013 · letzter Beitrag vom 9. Apr 2013
Antwort Antwort
Seite 1 von 3  1 23   
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 09:49
Delphi-Version: XE2
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: THaus.Create(hausNummer:UInt16) - Das Haus soll eine Konstante auf Instanzebene haben die im Konstruktor initialisiert wird.


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...)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 09:53
Wieso Konstante?

Für mich sieht das nach einer Read-Only-Property aus

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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#3

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 09:54
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 09:57
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 strict private nicht gegen.
  Mit Zitat antworten Zitat
Lemmy
Online

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:31
hi,

vielleicht versteh ich das Problem nicht, aber wie soll hier jemand in einer abgeleiteten Klasse auf das Private Feld zugreifen:

Delphi-Quellcode:
  TTestBasis = class(TObject)
  strict private
    FTestfeld: Integer;
  strict protected
    property TestFeld: Integer read FTestfeld;
  public
    constructor create(ATest: INteger);
  end;
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:35
hi,

vielleicht versteh ich das Problem nicht, aber wie soll hier jemand in einer abgeleiteten Klasse [...]
Dort natürlich nicht. Aber in der selben Klasse wäre es, ganz banal durch Unwissen oder Unachtsamkeit, möglich.

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...
  Mit Zitat antworten Zitat
Lemmy
Online

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:41
hi,
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...
ja - finde ich paranoid

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

Geändert von TBx ( 9. Apr 2013 um 11:13 Uhr) Grund: fehlerhaftes Tag entfernt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:43
Das wäre ja schon reine Zerstörungswut

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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:53
Das wäre ja schon reine Zerstörungswut

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.
In der Klasse entsprechend dokumentieren (z.B. an der property) und gut ist
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.990 Beiträge
 
Delphi 12 Athens
 
#10

AW: Ich vermisse Konstanten erst im Konstruktor initialisieren zu können

  Alt 9. Apr 2013, 10:55
In der Klasse entsprechend dokumentieren (z.B. an der property) und gut ist


Ich finde auch, man sollte nur hinreichend intelligente Programmierer an die Sourcen lassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 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