PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Static Ersatz in Delphi



Import-Script
02.09.2002, 17:50
Hi <BR> <BR>Ich habe eine Zählaufgabe in Delphi, die geradezu beispielhaft f&uuml;r eine lokale &#34;static&#34; Variable in C&#43;&#43; ist. Static gibt es in Delphi nicht, aber eine globale Variable möchte ich vermeiden wenn&#39;s geht. <BR>Geht das irgendwie? <BR>Und falls es wirklich was ähnliches wie static gibt, wie kann ich die Variable dann initialisieren? <BR> <BR>Danke <BR>

Import-Script
14.09.2002, 06:04
Ich w&uuml;sste nicht was an static &#40;C&#41; so besonders ist dass man es nicht anders lösen kann? <BR> <BR>Beschreib mal bitte genauer was du machen willst...

Import-Script
14.09.2002, 12:14
Anders lösen kann ich das schon, nur finde ich das nicht so elegant. <BR>Also, ich hab ein ziemlich großes Programm, in dem ich wegen der Übersichtlichkeit gern möglichst keine globalen Variablen haben will. Zumindest keine, die eigentlich nur von lokaler Bedeutung sind, also solche wie die, die ich meine. <BR> <BR>In meiner Funktion soll gezählt werden, wie oft die Funktion aufgerufen wurde. Verwendet wird dieser Wert nur innerhalb der Funktion. In Delphi muß ich daf&uuml;r eine globale Variable anlegen, sonst ist der Wert beim Verlassen der Funktion ja wieder weg. Die Deklaration dieser Geschichte kann man in C halt lokal schön mit &#34;static int x=0;&#34; lösen, dann steht der Zähler nicht in den globalen Variablen, wo keiner mehr weiß was das soll. <BR>Dachte nur da gibt&#39;s vielleicht was. <BR>

Import-Script
15.09.2002, 19:36
Hm, da währe static wohl doch ganz angebracht... <BR> <BR>Zum Thema Übersichtlichkeit: <BR>Ich hab in meinen größeren Programmen &#40;in Delphi&#41; immer eine Klasse namens &#34;GlobalVar&#34; welche mir wieder viel Überblick verschafft weil sie alle Variablen in sich aufnimmt. <BR> <BR>Bei deinem Problem fällt mir aber auch nichts ein, das ist schon etwas schwieriger. Das einzigste was mir dazu in den Sinn kommt ist nen bisschen triky, aber dennoch legitim! Jede Komponente in Delphi besitzt eine Eigenschaft namens &#34;Tag&#34; welche von der Componente selber nicht gebraucht oder ausgelesen wird. Dass heisst, wenn du noch nen paar Komponenten mit freier &#34;Tag&#34;-Eigenschaft &uuml;brig hasst kannst du eines dieser Integer-Felder pro Funktionsdurchlauf um 1 erhöhen... <BR> <BR>Vielleicht ja nen Denkanstoss.

Import-Script
16.09.2002, 13:58
Die Sache mit dem GlobalVar gefällt mir gut. Dann hab ich halt ein globales Objekt, aber das ist och tragar. <BR>Danke f&uuml;r den Anstoß! ;-&#41; <BR>

Import-Script
12.12.2002, 17:36
f&uuml;r einfache Funktionen in Delphi kann man ganz einfach typisierte Konstanten benutzen: <BR> <BR>function foo&#40;bar: integer&#41;: integer; <BR>const <BR> staticInt: integer = 0; <BR>var <BR> dynamicInt: integer; <BR>begin <BR> // Funktionsrumpf <BR>end; <BR> <BR>das funktioniert genauso als wenn in C/C&#43;&#43; die Variable staticInt als static deklariert worden wäre. <BR>Einziger Fallstrick: Delphi hat die Compileroption {$WRITEABLECONST ON} bzw. {$J&#43;} -- DIE muß nat&uuml;rlich gesetzt werden, sonst meckert der Compiler bei einem Schreibversuch auf die typisierte Konstante. <BR> <BR>Solche Konstrukte eignen sich auch wunderbar, um einen lokalen Semaphor f&uuml;r Funktionen, die nur 1x zur Zeit aufgerufen werden d&uuml;rfen, oder Funktionen, die bei einem zweiten Aufruf, der stattfindet, während eine erste Instanz noch läuft, abgebrochen werden sollen, zu realisieren. <BR> <BR>F&uuml;r andere Zwecke ist nat&uuml;rlich das Konstrukt &#39;GlobalVars&#39; sehr elegant, nur geht damit der Bezug zwischen der Funktion und der Variablen etwas verloren.