Statische lokale functies
Voorkom captures voor duidelijkheid en prestaties.
Statische lokale functies is een gratis C# Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.
Statische lokale functies
Door een lokale functie te markeren met static, voorkom je dat deze omringende variabelen of this vastlegt. Daardoor is de functie zelfstandig, duidelijker en vrij van verborgen geheugentoewijzingen voor closures.
Een statische lokale functie declareren
Voeg de modifier static toe vóór het retourtype. De functie kan nog steeds parameters accepteren en waarden retourneren; ze kan alleen geen lokale variabelen uit de buitenste context bereiken.
using System;
public class Program
{
public static void Main()
{
static int Square(int n) => n * n; // captures nothing
Console.WriteLine(Square(6));
}
}Vastleggen is niet toegestaan
Een statische lokale functie kan geen lokale variabelen uit de omringende context gebruiken. Alles wat nodig is, moet als parameter worden doorgegeven, waardoor de invoer expliciet is.
using System;
public class Program
{
public static void Main()
{
int factor = 3;
// factor must be passed in, not captured
static int Scale(int n, int f) => n * f;
Console.WriteLine(Scale(5, factor));
}
}Verborgen geheugentoewijzingen vermijden
Niet-statische lokale functies die variabelen vastleggen, kunnen een verborgen closure-object toewijzen. Een statische lokale functie legt nooit iets vast en vermijdt die toewijzing volledig.
using System;
public class Program
{
public static void Main()
{
// Pure helper, no closure object created
static bool IsEven(int n) => n % 2 == 0;
for (int i = 0; i < 5; i++)
Console.WriteLine(i + ": " + IsEven(i));
}
}Zelfbeschrijvende bedoeling
Het sleutelwoord static laat lezers zien dat de hulpfunctie alleen afhankelijk is van haar argumenten. Die garantie maakt de functie makkelijker te begrijpen en te testen.
using System;
public class Program
{
public static void Main()
{
static int Clamp(int value, int lo, int hi)
=> value < lo ? lo : value > hi ? hi : value;
Console.WriteLine(Clamp(15, 0, 10));
Console.WriteLine(Clamp(-3, 0, 10));
}
}De compiler dwingt vastleggen af
Als je per ongeluk naar een lokale variabele uit de omringende context verwijst binnen een statische lokale functie, meldt de compiler een fout. Zo worden onbedoelde afhankelijkheden vroeg ontdekt.
using System;
public class Program
{
public static void Main()
{
int seed = 7;
// Correct: seed is passed explicitly, not captured
static int Mix(int x, int s) => x * 31 + s;
Console.WriteLine(Mix(2, seed));
}
}Statische lokale functies met recursie
Statische lokale functies ondersteunen nog steeds recursie, omdat zichzelf aanroepen niet hetzelfde is als een variabele vastleggen.
using System;
public class Program
{
public static void Main()
{
static int Power(int baseN, int exp)
=> exp == 0 ? 1 : baseN * Power(baseN, exp - 1);
Console.WriteLine(Power(2, 10));
}
}Combineren met out-parameters
Net als elke methode kunnen statische lokale functies out-parameters gebruiken. Dat past goed bij hun zuivere gedrag zonder vastlegging, voor hulpfuncties in de stijl van voorwaardelijk parseren.
using System;
public class Program
{
public static void Main()
{
static bool TryParsePositive(string s, out int value)
{
value = 0;
return int.TryParse(s, out value) && value > 0;
}
if (TryParsePositive("42", out int n))
Console.WriteLine("got " + n);
Console.WriteLine(TryParsePositive("-1", out _));
}
}Statische lokale functies als delegates doorgeven
Omdat ze niets vastleggen, kunnen statische lokale functies zonder een closure toe te wijzen worden omgezet in delegates. Dat kan van belang zijn in veelgebruikte codepaden.
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
static bool IsBig(int n) => n > 100;
var nums = new List<int> { 50, 150, 200, 10 };
Console.WriteLine(nums.Count(IsBig));
}
}Wanneer je static verkiest
Geef de voorkeur aan een statische lokale functie wanneer de hulpfunctie geen omringende toestand nodig heeft. Daarmee leg je zuiverheid vast, voorkom je per ongeluk vastleggen en kan de code efficiënter zijn. Laat static alleen weg wanneer je lokale variabelen echt moet vastleggen.
using System;
public class Program
{
public static void Main()
{
static string Describe(int score)
{
if (score >= 90) return "A";
if (score >= 80) return "B";
return "C";
}
Console.WriteLine(Describe(95));
Console.WriteLine(Describe(82));
}
}Probeer het zelf
Schrijf een zuivere statische lokale functie en geef deze als predicaat door aan LINQ. Omdat de functie niets vastlegt, wordt deze zonder closure omgezet in een delegate.
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
static bool IsLeapYear(int year)
=> (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
var years = new List<int> { 1900, 2000, 2004, 2021, 2024 };
Console.WriteLine(string.Join(", ", years.Where(IsLeapYear)));
}
}Snelle controle
Haal voor de geest wat static toevoegt aan een lokale functie.
Samenvatting
Een static lokale functie legt niets vast.
- De functie kan geen lokale variabelen uit de omringende context of
thisgebruiken; geef gegevens door via parameters. - De functie vermijdt verborgen toewijzingen voor closures.
- De compiler dwingt de regel af dat er niets wordt vastgelegd en ontdekt zo onbedoelde afhankelijkheden.
- Geef er de voorkeur aan wanneer de hulpfunctie geen omringende toestand nodig heeft.
Leer C# met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 93
- Lessen
- 346
Veelgestelde vragen
Is de les “Statische lokale functies” gratis?
Ja — de volledige tekst van “Statische lokale functies” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.
Wat leer ik in “Statische lokale functies”?
Voorkom captures voor duidelijkheid en prestaties. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C# Academy te beginnen?
Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Statische lokale functies”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C# Academy?
Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Lokale functies declareren
- Closures en vastgelegde variabelen
- Statische lokale functies
- Lokale functies versus lambdas