Übung: Codeblöcke und Variablenbereich
- 11 Minuten
Ein Codeblock umfasst eine oder mehrere C#-Anweisungen, die einen Ausführungspfad definieren. Die Anweisungen außerhalb eines Codeblocks beeinflussen, wann, ob und wie oft dieser Codeblock zur Laufzeit ausgeführt wird. Die Grenzen eines Codeblocks werden in der Regel durch geschweifte Klammern, {}, definiert.
Zusätzlich zu ihren Auswirkungen auf den Ausführungspfad können sich Codeblöcke auch auf den Umfang Ihrer Variablen auswirken. Die Codebeispiele, die Sie während dieser Übung untersuchen, helfen Ihnen, die Beziehung zwischen Codeblöcken und dem Variablenbereich zu verstehen.
Codeblöcke wirken sich auf den Umfang einer Variablendeklaration aus
Der Variablenbereich bezieht sich auf die Sichtbarkeit einer Variablen für den anderen Code in Ihrer Anwendung. Auf eine Variable, die in einem lokalen Bereich definiert ist, kann nur innerhalb des Codeblocks zugegriffen werden, in dem sie definiert ist. Wenn Sie versuchen, außerhalb des Codeblocks auf sie zuzugreifen, erhalten Sie einen Compilerfehler.
Im weiteren Verlauf dieser Lerneinheit wird die Beziehung zwischen Codeblöcken und dem Variablenbereich untersucht.
Vorbereiten Ihrer Programmierumgebung
Dieses Modul enthält praktische Aktivitäten, die Sie durch den Prozess der Erstellung und Ausführung von Demonstrationscode führen. Es wird empfohlen, diese Aktivitäten mit Visual Studio Code als Entwicklungsumgebung durchzuführen. Die Verwendung von Visual Studio Code für diese Aktivitäten vereinfacht das Schreiben und Ausführen von Code in einer Entwicklerumgebung, die von Expert*innen weltweit verwendet wird.
Öffnen Sie Visual Studio Code.
Sie können das Windows-Startmenü (oder eine entsprechende Ressource für ein anderes Betriebssystem) verwenden, um Visual Studio Code zu öffnen.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Navigieren Sie im Dialogfeld Ordner öffnen zum Windows-Ordner „Desktop“.
Wenn Sie Codeprojekte in der Regel in einem anderen Ordner speichern, können Sie stattdessen auch diesen verwenden. Für diese Übung sollten Sie einen Speicherort haben, den Sie leicht finden und sich gut merken können.
Klicken Sie im Dialogfeld Ordner öffnen auf Ordner auswählen.
Wenn ein Sicherheitsdialogfeld angezeigt wird, in dem Sie gefragt werden, ob Sie den Autor*innen vertrauen, wählen Sie Ja aus.
Klicken Sie im Visual Studio Code-Menü Terminal die Option Neues Terminal aus.
Beachten Sie, dass eine Eingabeaufforderung im Panel „Terminal“ den Ordnerpfad für den aktuellen Ordner anzeigt. Beispiel:
C:\Users\someuser\Desktop>Hinweis
Wenn Sie auf Ihrem eigenen PC und nicht in einer Sandbox oder gehosteten Umgebung arbeiten und schon andere Microsoft Learn-Module in dieser C#-Reihe absolviert haben, haben Sie vielleicht bereits einen Projektordner für Codebeispiele erstellt. In diesem Fall können Sie den nächsten Schritt überspringen, der zum Erstellen einer Konsolen-App im Ordner „TestProject“ verwendet wird.
Geben Sie an der Terminal-Eingabeaufforderung zum Erstellen einer neuen Konsolenanwendung in einem angegebenen Ordner die folgende Eingabeaufforderung ein:
dotnet new console -o ./CsharpProjects/TestProjectDieser .NET-CLI-Befehl verwendet eine .NET-Programmvorlage, um ein neues C#-Konsolenanwendungsprojekt am angegebenen Ordnerspeicherort zu erstellen. Der Befehl erstellt die Ordner „CsharpProjects“ und „TestProject“ für Sie und verwendet „TestProject“ als Namen für Ihre
.csproj-Datei.Wenn eine Meldung angezeigt wird, die Besagt, dass die Dateien bereits vorhanden sind, fahren Sie mit den nächsten Schritten fort. Sie werden die vorhandenen Projektdateien wiederverwenden.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "CsharpProjects ".
Sie sollten den Ordner "TestProject " und zwei Dateien sehen, eine C#-Programmdatei mit dem Namen Program.cs und eine C#-Projektdatei namens TestProject.csproj.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Wählen Sie im Dialogfeld "Ordner öffnen " den Ordner "CsharpProjects " und dann " Ordner auswählen" aus.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "TestProject", und wählen Sie dann Program.cs aus.
Löschen Sie die vorhandenen Codezeilen.
Sie verwenden dieses C#-Konsolenprojekt zum Erstellen und Ausführen von Codebeispielen im Rahmen dieses Moduls.
Schließen Sie das Panel „Terminal“.
Erstellen einer Variablen innerhalb eines Codeblocks
Zunächst betrachten Sie den Fall, in dem eine Variable in einem Codeblock initialisiert wird.
Stellen Sie sicher, dass Visual Studio Code geöffnet ist und „Program.cs“ im Editor-Bereich angezeigt wird.
Hinweis
„Program.cs“ sollte leer sein. Wenn dies nicht der Fall ist, wählen Sie alle Codezeilen aus, und löschen Sie sie.
Geben Sie den folgenden Code in den Visual Studio Code-Editor ein:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Die Datei „Program.cs“ muss vor dem Erstellen oder Ausführen des Codes gespeichert werden.
Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.
Ein Terminalbereich wird geöffnet. Der Terminalbereich sollte eine Eingabeaufforderung enthalten, die anzeigt, dass das Terminal am Speicherort Ihres Ordners „TestProject“ geöffnet ist.
Geben Sie an der Eingabeaufforderung des Terminals den Befehl dotnet run ein, und drücken Sie dann die EINGABETASTE.
Hinweis
Wenn die Meldung „Es wurde kein ausführbares Projekt gefunden“ angezeigt wird, stellen Sie sicher, dass in der Eingabeaufforderung des Terminals der erwartete Speicherort des Ordners „TestProject“ angezeigt wird. Beispiel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Die folgende Ausgabe sollte angezeigt werden:
Inside the code block: 10
Dies ist die erwartete Ausgabe. Aber was ist, wenn Sie auf die Variable value außerhalb des if-Anweisungscodeblocks zugreifen möchten?
Versuchen Sie, auf eine Variable außerhalb des Codeblocks zuzugreifen, in dem sie deklariert ist
Erstellen Sie im Visual Studio Code-Editor eine neue Codezeile unterhalb des
if-Anweisungscodeblocks.Fügen Sie in der von Ihnen erstellten leeren Codezeile die folgende Codezeile hinzu:
Console.WriteLine($"Outside the code block: {value}");Stellen Sie sicher, dass Ihr aktualisierter Code wie folgt aussieht:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus.
Geben Sie
dotnet runüber die Eingabeaufforderung am Terminal ein, um Ihren Code auszuführen.Beachten Sie, dass Sie beim Versuch, die Anwendung auszuführen, einen Kompilierungsfehler erhalten:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Der Program.cs(7,46)-Teil der Meldung sagt Ihnen, dass der Fehler mit Zeile 7 in der Datei Program.cs, Spalte 46, zusammenhängt.
Dieser Fehler wird erzeugt, weil eine Variable, die innerhalb eines Codeblocks deklariert wird, nur innerhalb dieses Codeblocks zugänglich ist (und nur gesehen werden kann). Da auf eine Variable außerhalb des Codeblocks, in dem sie deklariert ist, nicht zugegriffen werden kann, so kann value auch nicht von Zeile 7 Ihres Codes aus aufgerufen werden.
Eine Variable, die in einem Methodencodeblock deklariert ist, wird als lokale Variable bezeichnet. Wenn Sie Artikel lesen, die sich mit dem Geltungsbereich von Variablen befassen, werden Sie vielleicht auf den Begriff lokale Variable stoßen.
Verschieben Sie die Variablendeklaration oberhalb des Codeblocks
Um auf eine Variable sowohl innerhalb als auch außerhalb eines Codeblocks zuzugreifen, müssen Sie die Variable vor (über) dem Codeblock deklarieren, damit der Code außerhalb des Codeblocks die Variable „sehen“ kann.
Aktualisieren Sie Ihren Code im Visual Studio Code-Editor wie folgt:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Nehmen Sie sich einen Moment Zeit, um die Aktualisierungen zu überprüfen.
Beachten Sie, dass
valuejetzt außerhalb desifCodeblocks deklariert (aber nicht initialisiert) wird.Verwenden Sie Visual Studio Code, um Ihre Updates zu speichern, und führen Sie dann Ihren Code aus.
Beachten Sie, dass weiterhin ein Kompilierungsfehler besteht.
Wenn Sie diesmal versuchen, die Anwendung auszuführen, wird der folgende Kompilierungsfehler angezeigt:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Der Fehler steht im Zusammenhang mit Zeile 6 innerhalb des Codeblocks, da
valuenicht initialisiert ist (ihr wurde kein Wert zugewiesen). Wenn sich die Codezeilevalue = 10;oberhalb desifAnweisungscodeblocks befände, würde die Anwendung ordnungsgemäß kompiliert und alles wäre in Ordnung. Davaluejedoch nicht initialisiert wurde, kann nicht innerhalb des Codeblocks darauf zugegriffen werden.Wenn Sie sicherstellen, dass Ihre Variablen initialisiert sind, bevor Sie versuchen, auf sie zuzugreifen, können Sie dieses Problem lösen.
Initialisieren Sie eine Variable als Teil der Variablendeklaration
Um
valueals Teil der Variablendeklaration zu initialisieren, aktualisieren Sie Ihren Code wie folgt:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Dieser Code behebt den Kompilierungsfehler „nicht zugewiesene lokale Variable“, indem
valueals Teil der Variablendeklaration initialisiert wird.Verwenden Sie Visual Studio Code, um Ihren Code zu speichern und auszuführen.
Wenn Sie jetzt die Anwendung ausführen, sollten Sie die folgende Ausgabe erhalten:
Inside the code block: 0 Outside the code block: 10
Prüfen Sie die Interpretation Ihres Codes durch den Compiler
Um Sie bei der Vermeidung von Laufzeitfehlern zu unterstützen, analysiert der C#-Compiler Ihren Code im Visual Studio Code-Editor und während des Buildprozesses. Allerdings interpretiert der Compiler Ihren Code nicht immer auf dieselbe Weise wie Sie selbst.
Betrachten Sie die folgenden zwei Codebeispiele, die dem gleichen Zweck zu dienen scheinen:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Möglicherweise sollten diese beiden Beispiele immer dasselbe Ergebnis erzeugen, aber der C#-Compiler interpretiert diese beiden Codebeispiele unterschiedlich.
Für das erste Codebeispiel interpretiert der Compiler flag als eine boolesche Variable, welcher der Wert true oder false zugewiesen werden kann. Der Compiler kommt zu dem Schluss, wenn flag gleich false ist, dann wird value nicht initialisiert, wenn der zweite Console.WriteLine() ausgeführt wird. Im Wesentlichen betrachtet der Compiler die folgenden beiden Codeausführungspfade als möglich:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
AND
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Da der Compiler den zweiten Pfad als Möglichkeit ansieht (für Codebeispiel 1), erzeugt er während des Buildprozesses eine Fehlermeldung. Außerdem warnt Sie der Code-Editor in Visual Studio Code vor diesem Problem, indem er eine rote Wellenlinie unter value (unterhalb des Codeblocks) anzeigt.
Für das zweite Codebeispiel kommt der Compiler zu dem Schluss, dass der Inhalt des if Anweisungscodeblocks immer ausgeführt wird (true ist immer true). Der Compiler generiert keinen Buildfehler, da er das zweite Codebeispiel so interpretiert, dass es einen einzigen Ausführungspfad hat, wie folgt:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Zusammenfassung
Hier folgen ein paar wichtige Aspekte, die Sie bei Codeblöcken beachten sollten:
- Wenn Sie eine Variable innerhalb eines Codeblocks deklarieren, ist ihre Sichtbarkeit auf diesen Codeblock beschränkt und es kann nicht auf diese Variable außerhalb des Codeblocks zugegriffen werden.
- Um sicherzustellen, dass eine Variable sowohl innerhalb als auch außerhalb eines Codeblocks sichtbar ist, müssen Sie die Variable vor dem Codeblock deklarieren (außerhalb und oberhalb des Codeblocks).
- Stellen Sie sicher, dass Variablen initialisiert werden, bevor Ihr Code versucht, auf sie zuzugreifen (für alle potenziellen Codeausführungspfade).