Övning – Förstå metodomfång

Fullbordad

for loopar, if-else instruktioner och metoder representerar alla olika typer av kodblock. Varje kodblock har sitt eget "omfång". "Omfång" är regionen för ett program där vissa data är tillgängliga. Variabler som deklareras i en metod, eller något kodblock, är endast tillgängliga i den regionen. När program blir mer komplicerade hjälper det här mönstret programmerare att konsekvent använda tydligt namngivna variabler och underhålla lättläst kod.

I den här övningen lär du dig mer om metodomfång genom att arbeta med olika typer av metoder och variabler.

Testa variabelomfång

Instruktioner som deklareras utanför något kodblock kallas för toppnivåinstruktioner. Variabler som deklareras i toppnivåinstruktioner kallas "globala variabler". Globala variabler är inte begränsade till något omfång och kan användas var som helst i programmet. Globala variabler kan vara användbara för olika metoder som behöver komma åt samma data. Det är dock viktigt att vara uppmärksam på variabelnamn i olika omfång.

  1. Ta bort befintlig kod från föregående övningar i Visual Studio Code-redigeraren.

  2. Ange följande kod i Visual Studio Code-redigeraren:

    string[] students = {"Jenna", "Ayesha", "Carlos", "Viktor"};
    
    DisplayStudents(students);
    DisplayStudents(new string[] {"Robert","Vanya"});
    
    void DisplayStudents(string[] students) 
    {
        foreach (string student in students) 
        {
            Console.Write($"{student}, ");
        }
        Console.WriteLine();
    }
    

    I den här koden skapar du en global students matris och en metod DisplayStudents som accepterar en parameter med samma namn.

  3. Spara och kör koden för att observera följande utdata:

    Jenna, Ayesha, Carlos, Viktor, 
    Robert, Vanya, 
    

    Observera att metodparametern student har företräde framför den globala student matrisen. Det är viktigt att vara medveten om vilka globala variabler du vill att dina metoder ska använda.

  4. Ta bort föregående kod.

  5. Ange följande kod i redigeraren:

    PrintCircleArea(12);
    
    void PrintCircleArea(int radius)
    {
        double pi = 3.14159;
        double area = pi * (radius * radius);
        Console.WriteLine($"Area = {area}");
    }
    

    Den här koden beräknar och visar området för en cirkel.

  6. Försök att referera till variablerna i PrintCircleArea metoden genom att uppdatera koden på följande sätt:

    PrintCircleArea(12);
    double circumference = 2 * pi * radius;
    

    Felmeddelanden visas som informerar dig om att namnen pi och radius inte finns i det aktuella omfånget. Dessa variabler finns bara inom metodomfånget PrintCircleArea .

  7. Ta bort den felaktiga koden och lägg till följande kod:

    void PrintCircleCircumference(int radius)
    {
        double pi = 3.14159;
        double circumference = 2 * pi * radius;
        Console.WriteLine($"Circumference = {circumference}");
    }
    

    Eftersom variabeln pi är inställd på samma fasta värde och används i båda metoderna är det här värdet en bra kandidat för en global variabel. I det här exemplet radius är inte en global variabel så att du kan anropa metoderna med olika värden radius utan att uppdatera en variabel varje gång.

  8. Uppdatera koden till följande:

    double pi = 3.14159;
    
    void PrintCircleArea(int radius)
    {
        double area = pi * (radius * radius);
        Console.WriteLine($"Area = {area}");
    }
    
    void PrintCircleCircumference(int radius)
    {
        double circumference = 2 * pi * radius;
        Console.WriteLine($"Circumference = {circumference}");
    }
    

    Nu kan båda metoderna referera till samma värde pi utan att behöva definiera det. Du kanske redan har gissat att metoder kan anropa andra metoder. Så länge en metod definieras inom programmets omfång kan den i allmänhet anropas var som helst.

  9. Lägg till en ny metod i koden på följande sätt:

    double pi = 3.14159;
    PrintCircleInfo(12);
    PrintCircleInfo(24);
    
    void PrintCircleInfo(int radius) 
    {
        Console.WriteLine($"Circle with radius {radius}");
        PrintCircleArea(radius);
        PrintCircleCircumference(radius);
    }
    

    I den här koden skapar du en ny metod PrintCircleInfo för att anropa de befintliga metoderna. Värdet radius vidarebefordras också till varje metod. Genom att skapa modulariserade metoder kan du hålla koden organiserad och lättläst.

  10. Spara och kör koden för att observera följande utdata:

    Circle with radius 12
    Area = 452.38896
    Circumference = 75.39815999999999
    Circle with radius 24
    Area = 1809.55584
    Circumference = 150.79631999999998
    

Sammanfattning

Här är vad du har lärt dig om metodomfång hittills:

  • Variabler som deklareras i en metod är endast tillgängliga för den metoden.
  • Variabler som deklareras i toppnivåinstruktioner är tillgängliga i hela programmet.
  • Metoder har inte åtkomst till variabler som definierats inom olika metoder.
  • Metoder kan anropa andra metoder.