C#-Variablenbereichs- und Kompilierungsprobleme: Eine detaillierte Erklärung
Der Variablenbereich in C# bestimmt die Zugänglichkeit von Variablen innerhalb eines Programms. Sehen wir uns zwei Codebeispiele an, um häufige bereichsbezogene Kompilierungsfehler zu veranschaulichen.
Beispiel 1: Kompilierungsfehler
Der folgende Codeausschnitt kann nicht kompiliert werden:
<code class="language-csharp">public void MyMethod() { int i = 10; for (int x = 10; x < 20; x++) { int i = x; // Point 1: Error - Duplicate variable 'i' object objX = new object(); if (x > 15) { object objX = new string(""); // Point 2: Error - Redeclaration of objX } } }</code>
Analyse der Fehler in Beispiel 1
Dieser Code schlägt aufgrund zweier wichtiger C#-Scoping-Regeln fehl:
Eindeutige Variablennamen innerhalb eines Bereichs: Innerhalb eines einzelnen Codeblocks (definiert durch geschweifte Klammern {}
) können Sie nicht zwei Variablen mit demselben Namen deklarieren. Punkt 1 zeigt einen Verstoß: int i = x;
deklariert i
innerhalb des Blocks der for
-Schleife neu und steht im Konflikt mit dem außerhalb deklarierten int i = 10;
.
Konsistente Identifikatorreferenz: Innerhalb eines Blocks muss ein Identifikator konsistent auf dieselbe Entität verweisen. Punkt 2 verstößt dagegen: objX
wird als object
deklariert und dann innerhalb des verschachtelten string
-Blocks als if
neu deklariert. C# lässt solche Neudefinitionen innerhalb desselben Bereichs nicht zu.
Beispiel 2: Erfolgreiche Kompilierung
Dieses Beispiel wird erfolgreich kompiliert, obwohl auch verschachtelte Schleifen verwendet werden:
<code class="language-csharp">public void MyMethod() { for (int x = 10; x < 20; x++) { int i = x; object objX = new object(); } for (int x = 20; x < 30; x++) { int i = x; object objX = new object(); } }</code>
Warum Beispiel 2 kompiliert wird
Beispiel 2 vermeidet die vorherigen Fehler, weil:
Eindeutige Blöcke: Jede for
-Schleife definiert ihren eigenen separaten Block. Innerhalb einer Schleife deklarierte Variablen sind in der anderen nicht sichtbar.
Eindeutige Bezeichner pro Block: Während die Variablennamen (i
, x
, objX
) in beiden Schleifen gleich sind, werden sie als unterschiedliche Variablen behandelt, da sie sich in separaten Bereichen befinden .
Keine Bereichsüberlappung: Die Variablendeklarationsräume überlappen sich nicht illegal. Es gibt keinen Konflikt, da jede Variable nur innerhalb des Blocks ihrer jeweiligen Schleife existiert.
Zusammenfassend lässt sich sagen, dass das Verständnis der Variablenbereichsregeln von C# von entscheidender Bedeutung ist, um Kompilierungsfehler zu vermeiden. Innerhalb eines Blocks deklarierte Variablen sind nur innerhalb dieses Blocks zugänglich. Das erneute Deklarieren von Variablen mit demselben Namen oder die inkonsistente Verwendung von Bezeichnern innerhalb desselben Bereichs führt zu Kompilierungsfehlern.
Das obige ist der detaillierte Inhalt vonWarum kann dieser C#-Code zum Variablenbereich nicht kompiliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!