Kapitel 14 Bereiche lokaler Variablen
In C# können lokale Variablen nur mit Namen
versehen werden, über die sie in einem vorgegebenen Bereich eindeutig
identifiziert werden können. Weist ein Name in einem Bereich mehrere
Bedeutungen auf und kann der Name nicht eindeutig identifiziert werden,
ist die innerste Deklaration des Namens fehlerhaft und muss geändert
werden. Sehen Sie sich folgendes Beispiel an:
using System;
class MyObject
{
public MyObject(int x, int y)
{
this.x = x;
this.y = y;
}
int x;
int y;
}
In der Erstellungsroutine bezieht sich x auf den Parameter namens
x, da Parameter Vorrang vor Mitgliedsvariablen haben. Für
den Zugriff auf die Instanzvariable mit Namen x muss dieser
das Präfix this. hinzugefügt werden, um zu kennzeichnen,
dass es sich um eine Instanzvariable handelt.
Zur Vermeidung eines Namenskonfliktes, wird diese Methode dem Umbenennen des Erstellungsparameters
oder der Mitgliedsvariablen vorgezogen.
In der folgenden Situation besteht keine Möglichkeit,
beide Variablen zu benennen, daher ist die innere Deklaration ein Fehler:
// Fehler
using System;
class MyObject
{
public void Process()
{
int x = 12;
for (int y = 1; y < 10; y++)
{
// Hier keine Möglichkeit zur Benennung des äußeren
x.
int x = 14;
Console.WriteLine("x = {0}", x);
}
}
}
Da die innere Deklaration von x die
äußere Deklaration von x ausblenden würde,
ist dieser Code nicht erlaubt.
C# weist diese Beschränkung auf, um die Codelesbarkeit
und die Verwaltbarkeit des Codes zu verbessern. Ohne diese Beschränkung
wäre es innerhalb eines verschachtelten Bereichs schwierig, die
verwendete Version der Variablen zu ermitteln – oder überhaupt
festzustellen, dass mehrere Versionen vorhanden sind.
|