AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wert aus einer const-Deklaration überschreiben?!
Thema durchsuchen
Ansicht
Themen-Optionen

Wert aus einer const-Deklaration überschreiben?!

Ein Thema von OldGrumpy · begonnen am 22. Feb 2007 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#1

Wert aus einer const-Deklaration überschreiben?!

  Alt 22. Feb 2007, 09:28
Hallo zusammen,

heute bin ich auf eine sehr seltsame Sache gestossen. Normalerweise geht man ja davon aus, dass Werte als "const" deklariert werden weil sie eben Konstanten sind. Doch heute bin ich eines besseren belehrt worden(?)

Folgendes Konstrukt:

Unit a deklariert im interface einen const-Wert:

Delphi-Quellcode:
Unit test;

interface
uses{...};
type{Typendeklarationen}
const maxvalue: integer = 2500;
{...}
So weit, so gut. Nun habe ich hier aber eine zweite Unit, die im Initialization-Teil diese Konstante mit einem eigenen Wert überschreibt! Laut Debugger steht danach auch der neue Wert drin. Wie kann das sein? Und vor allem, macht das Sinn, und kann das später Probleme geben? Zur Verdeutlichung:

Delphi-Quellcode:
Unit main;
interface
uses {...},test;
{Rest der Interface-Abteilung}
implementation
{...}
initialization
{...}
test.maxvalue:=10000;
{...}
finalization
{...}
end.
Vielleicht hat ja jemand einen hilfreichen Kommentar dazu
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 22. Feb 2007, 09:32
Dies hängt von deinen Projekteinstellungen ab. Dort dann im speziellen von den Compilereinstellungen zu typisierten Konstanten. Du hast die Möglichkeit typisierten Konstanten was zu zu weisen und erhälst damit dann eine statische Variable. Ob dies nun möglich ist, legst du in den Projektoptionen/Compiler fest.
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 22. Feb 2007, 09:57
Ist z.B. hilfreich wenn du einen gewissen wert nur in einer prozedur speichern willst ohne dass andere objekte,funktionen oder sonst was zugriff drauf hat.

Delphi-Quellcode:
procedure TForm1.wert( nWert : integer );
const
  cnWert = -1;
begin
  cnWert := nWert + cnWert;
  
  // weitere verarbeitung...
end;
die konstante wird also wie eine member variable behandelt ( der aktuelle wert bleibt da drin ) nur ist die sichtbarkeit der konstante durch die deklaration nur noch innerhalb der prozedur "wert".

eine andere funktion ist z.b. das realisieren von singleton objekten...

Delphi-Quellcode:
class function TSingleton.Instance : TSingleton;
const
  coInstance : TSingleton = nil;
begin
  if not Assigned( coInstance ) then
    coInstance := TSingleton.Create;

  result := coInstance;
end;
so kann man immer über TSingleton.Instance.Funktion auf das objekt zugreifen... ohne irgendwann mal was instanzieren zu müssen... achja und in jeder unit wo die Singleton.pas eingebunden ist kann auf ein und das selbe objekt zugegriffen werden ( man verhindert eine globale variable )

gruß
Reli
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 22. Feb 2007, 11:54
Zitat von Relicted:
die konstante wird also wie eine member variable behandelt ( der aktuelle wert bleibt da drin ) nur ist die sichtbarkeit der konstante durch die deklaration nur noch innerhalb der prozedur "wert".
Hinweis: ... wie ein static member (bzw. class member)! Ein normaler Member wäre pro Instanz vorhanden, diese "Variable" ist nur einmalig vorhanden!
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 23. Feb 2007, 07:43
Na gut, mit diesen Zusatzinfos macht das Sinn. Herzlichen Dank für die ausführlichen Erläuterungen Bisher ging ich davon aus dass const auch const bedeutet, aber wie so oft im Leben... "das ist nicht so einfach"
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 23. Feb 2007, 07:47
tja wie so oft... doppeldeutigkeit ist doch ganz eindeutig oder so ^^
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 23. Feb 2007, 09:16
Was mir eben noch auffällt und noch nicht richtig hervorgehoben wurde: wenn die Typenangabe bei der Deklaration der Konstante weggelassen wird, dann ist die Konstante unabhängig von der Compilereinstellung konstant. Die Compilereinstellung bezieht sich nur auf typisierte Konstanten.

Delphi-Quellcode:
Const
  coReallyConst = 34.4; // Typ nicht angegeben: immer konstant
  coNotConst : Double = 111.3; // Typ angegeben: Compilereinstellung legt fest ob konstant oder nicht.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#8

Re: Wert aus einer const-Deklaration überschreiben?!

  Alt 23. Feb 2007, 09:37
Zitat von Muetze1:
Was mir eben noch auffällt und noch nicht richtig hervorgehoben wurde: wenn die Typenangabe bei der Deklaration der Konstante weggelassen wird, dann ist die Konstante unabhängig von der Compilereinstellung konstant. Die Compilereinstellung bezieht sich nur auf typisierte Konstanten.

Delphi-Quellcode:
Const
  coReallyConst = 34.4; // Typ nicht angegeben: immer konstant
  coNotConst : Double = 111.3; // Typ angegeben: Compilereinstellung legt fest ob konstant oder nicht.
Hallo,

das ist historisch bedingt: typisierte Konstanten waren, warum auch immer, die erste in Delphi verfügbare Möglichkeit Variablen zu initialisieren - war damals (Delphi 1 oder 2) auch als so beabsichtigt beschrieben, also ausdrücklich als nicht-konstant. Habe ich noch in einigen alten Programmen so drinstehen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:07 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