Oefening: bereik van methode begrijpen

Voltooid

for lussen, if-else instructies en methoden vertegenwoordigen allemaal verschillende typen codeblokken. Elk codeblok heeft een eigen 'scope'. Bereik is de regio van een programma waar bepaalde gegevens toegankelijk zijn. Variabelen die in een methode of een codeblok zijn gedeclareerd, zijn alleen toegankelijk binnen die regio. Naarmate programma's ingewikkelder worden, helpt dit patroon programmeurs consistent om duidelijk benoemde variabelen te gebruiken en gemakkelijk te lezen code te onderhouden.

In deze oefening leert u meer over het bereik van methoden door te werken met verschillende typen methoden en variabelen.

Bereik van testvariabele

Instructies die buiten een codeblok worden gedeclareerd, worden instructies op het hoogste niveau genoemd. Variabelen die zijn gedeclareerd in instructies op het hoogste niveau, worden globale variabelen genoemd. Globale variabelen zijn niet beperkt tot elk bereik en kunnen overal in het programma worden gebruikt. Globale variabelen kunnen handig zijn voor verschillende methoden die toegang moeten hebben tot dezelfde gegevens. Het is echter belangrijk om aandacht te besteden aan variabelenamen in verschillende bereiken.

  1. Verwijder in de Visual Studio Code-editor alle bestaande code uit de vorige oefeningen.

  2. Voer de volgende code in de Visual Studio Code-editor in:

    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();
    }
    

    In deze code maakt u een globale students matrix en een methode DisplayStudents die een parameter met dezelfde naam accepteert.

  3. Sla de code op en voer deze uit om de volgende uitvoer te bekijken:

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

    U ziet dat de methodeparameter student voorrang heeft op de globale student matrix. Het is belangrijk dat u bewust bent van de globale variabelen die u wilt gebruiken voor uw methoden.

  4. Verwijder de vorige code.

  5. Voer de volgende code in de editor in:

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

    Met deze code wordt het gebied van een cirkel berekend en weergegeven.

  6. Probeer als volgt te verwijzen naar de variabelen in de PrintCircleArea methode door uw code bij te werken:

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

    Foutberichten worden weergegeven met de mededeling dat de namen pi en radius niet in het huidige bereik bestaan. Deze variabelen bestaan alleen binnen het bereik van de PrintCircleArea methode.

  7. Verwijder de onjuiste code en voeg de volgende code toe:

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

    Omdat de variabele pi is ingesteld op dezelfde vaste waarde en in beide methoden wordt gebruikt, is deze waarde een goede kandidaat voor een globale variabele. In dit voorbeeld radius is dit geen globale variabele, zodat u de methoden kunt aanroepen met verschillende waarden radius zonder telkens een variabele bij te werken.

  8. Werk uw code bij naar het volgende:

    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}");
    }
    

    Beide methoden kunnen nu verwijzen naar dezelfde waarde zonder pi deze te hoeven definiƫren. Mogelijk hebt u al geraden dat methoden andere methoden kunnen aanroepen. Over het algemeen, zolang een methode binnen het bereik van uw programma is gedefinieerd, kan deze overal worden aangeroepen.

  9. Voeg als volgt een nieuwe methode toe aan uw code:

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

    In deze code maakt u een nieuwe methode PrintCircleInfo om de bestaande methoden aan te roepen. De waarde van radius wordt ook doorgegeven aan elke methode. Met het maken van modulaire methoden kunt u uw code overzichtelijk en gemakkelijk leesbaar houden.

  10. Sla de code op en voer deze uit om de volgende uitvoer te bekijken:

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

Samenvatting

Dit is wat u tot nu toe hebt geleerd over het methodebereik:

  • Variabelen die binnen een methode zijn gedeclareerd, zijn alleen toegankelijk voor die methode.
  • Variabelen die in instructies op het hoogste niveau zijn gedeclareerd, zijn overal in het programma toegankelijk.
  • Methoden hebben geen toegang tot variabelen die zijn gedefinieerd binnen verschillende methoden.
  • Methoden kunnen andere methoden aanroepen.