Øvelse – kodeblokke og variabelt omfang
- 11 minutter
En kodeblok er en eller flere C#-sætninger, der definerer en udførelsessti. Sætninger uden for en kodeblok påvirker hvornår, hvis og hvor ofte denne kodeblok udføres på kørselstidspunktet. Grænserne for en kodeblok defineres typisk af krøllede klammeparenteser, {}.
Ud over deres indvirkning på udførelsesstien kan kodeblokke også påvirke omfanget af dine variabler. De kodeeksempler, du undersøger i denne øvelse, hjælper dig med at forstå relationen mellem kodeblokke og variabelt omfang.
Kodeblokke påvirker omfanget af en variabelerklæring
Variabelomfang refererer til en variabels synlighed til den anden kode i dit program. En lokal variabel er kun tilgængelig i den kodeblok, hvor den er defineret. Hvis du forsøger at få adgang til variablen uden for kodeblokken, får du vist en compilerfejl.
I resten af dette undermodul udforskes relationen mellem kodeblokke og variabelt omfang.
Forbered dit kodemiljø
Dette modul indeholder praktiske aktiviteter, der guider dig gennem processen med at bygge og køre demonstrationskode. Du opfordres til at fuldføre disse aktiviteter ved hjælp af Visual Studio Code som dit udviklingsmiljø. Brug af Visual Studio Code til disse aktiviteter hjælper dig med at blive mere fortrolig med at skrive og køre kode i et udviklermiljø, der bruges af fagfolk over hele verden.
Åbn Visual Studio Code.
Du kan bruge Menuen Start i Windows (eller en tilsvarende ressource for et andet operativsystem) til at åbne Visual Studio Code.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
Gå til mappen Windows Desktop i dialogboksen Åbn mappe .
Hvis du har en anden mappeplacering, hvor du gemmer kodeprojekter, kan du i stedet bruge denne mappeplacering. Til denne træning er det vigtigt at have en placering, der er nem at finde og huske.
Vælg Vælg mappe i dialogboksen Åbn mappe.
Hvis du får vist en sikkerhedsdialogboks, hvor du bliver spurgt, om du har tillid til forfatterne, skal du vælge Ja.
Vælg Ny terminal i menuen Visual Studio Code Terminal.
Bemærk, at mappestien for den aktuelle mappe vises i en kommandoprompt i terminalpanelet. For eksempel:
C:\Users\someuser\Desktop>Seddel
Hvis du arbejder på din egen pc i stedet for i en sandkasse eller et hostet miljø, og du har fuldført andre Microsoft Learn-moduler i denne C#-serie, har du måske allerede oprettet en projektmappe til kodeeksempler. Hvis det er tilfældet, kan du springe over næste trin, som bruges til at oprette en konsolapp i mappen TestProject.
Angiv følgende prompt ved kommandoprompten Terminal for at oprette et nyt konsolprogram i en angivet mappe:
dotnet new console -o ./CsharpProjects/TestProjectDenne .NET CLI-kommando bruger en .NET-programskabelon til at oprette et nyt C#-konsolprogramprojekt på den angivne mappeplacering. Kommandoen opretter mapperne CsharpProjects og TestProject for dig og bruger TestProject som navnet på filen
.csproj.Hvis der vises en meddelelse om, at filerne allerede findes, skal du fortsætte med de næste trin. Du skal genbruge de eksisterende projektfiler.
Udvid mappen CsharpProjects i STIFINDER-visningen.
Du bør kunne se mappen TestProject og to filer, en C#-programfil med navnet Program.cs og en C#-projektfil med navnet TestProject.csproj.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
I dialogboksen Åbn mappe skal du vælge mappen CsharpProjects og derefter vælge Vælg mappe.
Udvid mappen TestProject i visningen STIFINDER, og vælg derefter Program.cs.
Slet de eksisterende kodelinjer.
Du skal bruge dette C#-konsolprojekt til at oprette, bygge og køre kodeeksempler under dette modul.
Luk terminalpanelet.
Opret en variabel i en kodeblok
Du begynder med at se på sagen, når en variabel initialiseres i en kodeblok.
Sørg for, at Visual Studio Code er åben, og at Program.cs vises i editorpanelet.
Seddel
Program.cs skal være tomt. Hvis det ikke er muligt, skal du vælge og slette alle kodelinjer.
Skriv følgende kode i Visual Studio Code Editor:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }Vælg Gemi menuen Visual Studio Code File .
Den Program.cs fil skal gemmes, før du kan oprette eller køre koden.
Højreklik på TestProjecti panelet EXPLORER for at åbne en Terminal på mappen TestProject, og vælg derefter Åbn i integreret terminal.
Der åbnes et terminalpanel. Terminalen skal indeholde en kommandoprompt, der viser, at Terminal er åben for din TestProject-mappeplacering.
I kommandoprompten Terminal skal du skrive dotnet run og derefter trykke på Enter for at køre din kode.
Seddel
Hvis du får vist en meddelelse med teksten "Et projekt, der ikke kan køres", skal du kontrollere, at terminalkommandoprompten viser den forventede placering af mappen TestProject. Eksempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du bør kunne se følgende output:
Inside the code block: 10
Dette er det forventede output. Men hvad nu, hvis du vil have adgang til variablen value uden for sætningskodeblokken if ?
Forsøg på at få adgang til en variabel uden for kodeblokken, hvor den er erklæret
Opret en ny kodelinje under sætningskodeblokken i
ifVisual Studio Code Editor.Tilføj følgende kodelinje på den tomme kodelinje, du har oprettet:
Console.WriteLine($"Outside the code block: {value}");Kontrollér, at den opdaterede kode ser ud som følger:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode.
Angiv
dotnet runfra Terminal-kommandoprompten for at køre din kode.Bemærk, at når du forsøger at køre programmet, får du vist en kompileringsfejl:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Den Program.cs(7,46) del af meddelelsen, der fortæller dig, at fejlen er knyttet til linje 7 i filen Program.cs, kolonne 46.
Denne fejl genereres, fordi en variabel, der er erklæret i en kodeblok, kun er tilgængelig (kan kun ses) i den pågældende kodeblok. Da der ikke er adgang til en variabel uden for den kodeblok, hvor den er erklæret, value kan der ikke opnås adgang til den fra linje 7 i koden.
En variabel, der er erklæret i en metodekodeblok, kaldes en lokal variabel. Du kan få vist udtrykket lokal variabel , der bruges, når du gennemser artikler, der omhandler variabelområde.
Flyt variabelerklæringen over kodeblokken
Hvis du vil have adgang til en variabel både i og uden for en kodeblok, skal du deklarere variablen før (ovenfor) kodeblokken, så koden uden for kodeblokken kan "se" variablen.
Opdater din kode i Visual Studio Code Editor på følgende måde:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Brug et øjeblik på at gennemse opdateringerne.
Bemærk, at
valuenu er erklæret (men ikke initialiseret) uden forifkodeblokken.Brug Visual Studio Code til at gemme dine opdateringer og derefter køre din kode.
Bemærk, at du stadig får vist en kompileringsfejl.
Denne gang får du vist følgende kompileringsfejl, når du forsøger at køre programmet:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Fejlen er knyttet til linje 6 i kodeblokken, fordi
valueden ikke er initialiseret (har ikke fået tildelt en værdi). Hvis kodelinjenvalue = 10;blev placeret over sætningskodeblokkenif, kompileres programmet korrekt, og alt ville være fint. Men davalueden ikke er blevet initialiseret, kan der ikke opnås adgang til den i kodeblokken.Dette problem løses ved at sikre, at dine variabler initialiseres, før du forsøger at få adgang til dem.
Initialiser en variabel som en del af variabelerklæringen
Hvis du vil initialisere
valuesom en del af variabelerklæringen, skal du opdatere din kode på følgende måde:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Denne kode løser kompileringsfejlen "ikke-tildelt lokal variabel" ved at initialisere
valuesom en del af din variabelerklæring.Brug Visual Studio Code til at gemme og køre din kode.
Bemærk, at når du kører programmet nu, kan du se følgende output:
Inside the code block: 0 Outside the code block: 10
Undersøg compilerens fortolkning af din kode
For at hjælpe dig med at undgå kørselsfejl analyserer C#-compileren din kode i Visual Studio Code Editor og under buildprocessen. Compileren fortolker muligvis ikke altid din kode på samme måde, som du gør.
Overvej følgende to kodeeksempler, der ser ud til at tjene samme formål:
// 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}");
Du føler måske, at disse to eksempler altid skal give det samme resultat, men C#-compileren fortolker disse to kodeeksempler forskelligt.
For det første kodeeksempel fortolker flag compileren som en boolesk variabel, der kan tildeles en værdi af enten true eller false. Compileren konkluderer, at hvis flag er false, value ikke initialiseres, når den anden Console.WriteLine() udføres. Compileren mener i bund og grund, at følgende to stier til udførelse af kode er mulige:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
OG
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Da compileren betragter den anden sti som en mulighed (for kodeeksempel 1), genereres der en fejlmeddelelse under buildprocessen. Desuden advarer kodeeditoren i Visual Studio Code dig om dette problem ved at vise en rød bølgestreg under value (under kodeblokken).
For det andet kodeeksempel konkluderer complieren, at indholdet af if sætningskodeblokken altid udføres (true er altid true). Compileren genererer ikke en buildfejl, fordi den fortolker det andet kodeeksempel for at have en enkelt udførelsessti på følgende måde:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Resumé
Her er et par vigtige ting, du skal huske om kodeblokke:
- Når du deklarerer en variabel i en kodeblok, er dens synlighed lokal for den pågældende kodeblok, og der kan ikke opnås adgang til denne variabel uden for kodeblokken.
- Hvis du vil sikre dig, at en variabel er synlig både i og uden for en kodeblok, skal du deklarere variablen før kodeblokken (uden for og over kodeblokken).
- Sørg for, at variabler initialiseres, før din kode forsøger at få adgang til dem (for alle potentielle stier til udførelse af kode).
Tjek din viden
Feedback
Var denne side nyttig?
No
Har du brug for hjælp til dette emne?
Vil du prøve at bruge Ask Learn til at tydeliggøre eller guide dig gennem dette emne?