Hey Frank,
Delphi hat keine Probleme bei Namensgleichheit von Identifiern. Es gilt lediglich den Scope und Namespace (ab D7) korrekt zu verwenden. Du kannst mithilfe des Debuggers der Delphi-
IDE leicht überprüfen, ob zwei (einfache) Variablen identisch sind, also den selben Speicherplatz einnehmen, indem Du ihre Adressen auf Gleichheit überprüfst. Der integrierte Debugger und die Watch List (Strg+Alt+W) eignen sich zur Laufzeit prima, wenn Du Ausdrücke der Art
@myVar auswerten lässt (in der
IDE Strg+F5).
In diesem Beispiel:
Delphi-Quellcode:
{$J+}
procedure StaticVar42;
const
myVar : Integer = 42;
begin
Inc(myVar);
end;
procedure StaticVar137;
const
myVar : Integer = 137;
begin
Inc(myVar);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Test42;
Test137;
end;
ergibt der Ausdruck
@myVar innerhalb von
StaticVar42 zB den Wert
@myVar:$44EBC0 und innerhalb von
StaticVar127 den Wert
@myVar:$44EBC4. Die beiden zuweisbaren Konstanten (assignable typed constants) nehmen also nicht den selben Speicherplaz ein und sind folglich nicht identisch.
Du kannst den integrierten Debugger nun mithilfe der ermittelten Adresse verwenden, um den Inhalt der beiden Variablen auch "von außerhalb" abzufragen, indem Du die Ausdrücke
PInteger($44EBC0)^ bzw.
PInteger($44EBC0)^ abfragst.
Tatsächlich handelt es sich bei zuweisbaren Konstanten immer (egal ob Methode, lokale Prozedur oder global) um Variablen im Datensegment, sie sind daher auch außerhalb der Prozedur/Methode gültig (Rückgabe von Pointern auf dieser Konstanten sind zulässig) und werden von allen Threads gemeinsam verwendet. Ein
static threadvar myVar = 123;
oder
threadconst myVar = 123;
gibt es leider nicht ;(
HTH