Programmering

C # 7 i dybden: Udforskning af lokale funktioner

Understøttelsen af ​​lokale funktioner er en fremragende ny funktion, der er blevet introduceret i C # 7. Bemærk, at du kan definere lokale funktioner inden for enhver metode, konstruktøren af ​​en klasse eller inde i en ejendom - både getter og setter. Når den er kompileret af C # -compileren, bliver en lokal funktion omdannet til en privat metode.

Når du udvikler applikationer, er du muligvis ofte nødt til at oprette metoder, der ikke genbruges - du har brug for dem kun for modularitet. Du vil måske ikke have, at dine metoder skal være lange, da vedligeholdelse af sådanne metoder vil blive et mareridt over tid. Du kan dog ende med at have mange private metoder, der ikke ville blive genbrugt, ikke? Denne nye funktion i C # 7 kommer til undsætning under sådanne omstændigheder - du kan definere funktioner, der er lokale i et andet omfang, eller det kan være inde i en anden funktion eller endda inde i en ejendom (både getter og setter).

Forestil dig en situation, hvor du har brug for en hjælperfunktion, der kun kaldes en gang. Før C # 7 var omkring, kunne du have opnået dette ved hjælp af Func og Action-typer med anonyme metoder. Der var dog et par udfordringer. De understøttede ikke generiske, params og ref og out parametre.

Med C # 7 rundt kan du nu erklære sådanne funktioner inde i en anden som en anden funktion. Sådanne funktioner er kendt som lokale funktioner. Med andre ord giver supporten til lokale funktioner dig mulighed for at definere en funktion inden for rækkevidden af ​​en anden funktion.

Implementering af lokale funktioner i C #

Lad os skrive noget kode og se, hvordan lokale funktioner fungerer. Overvej følgende kodestykke. Bemærk, at Sum-metoden er defineret inde i selve Main-metoden i det følgende kodestykke.

statisk ugyldigt Main (streng [] args)

        {

int Sum (int x, int y)

            {

returnere x + y;

            }

Console.WriteLine (sum (10, 20));

Console.ReadKey ();

        }

I dette eksempel er Sum-metoden en lokal funktion - den er lokal til Main-metoden. Med andre ord kan Sum-metoden kun bruges inde i Main-metoden, dvs. den metode, inden for hvilken den er defineret.

Lokale funktioner kan have alle funktioner i en almindelig metode, bortset fra at lokale funktioner ikke kan være statiske. En lokal funktion kan endda være asynkron og kan også have adgang til variabler fra den lukkende blok. Parametre og lokale variabler i det omsluttende omfang kan bruges i en lokal funktion svarende til lambda-udtryk. Det skal bemærkes, at fangede lokale variabler overføres til en lokal funktion ved henvisning. Her er et andet eksempel, der illustrerer, hvordan en lokal funktion kan få adgang til variablerne i dens omslutningstype.

offentlig statisk ugyldig skærm (streng str)

        {

int ctr = 5;

DisplayText ();

ugyldigt DisplayText ()

            {

for (int i = 0; i <ctr; i ++)

Console.WriteLine (str);

            }

        }

Se nu kodeuddraget ovenfor. Displaymetoden indeholder en strengparameter og en heltalsvariabel inde i den. Bemærk, at den lokale funktion, der er defineret inden for Display-metoden (kaldet DisplayText), kan have adgang til de lokale variabler og også argumentet for Display-metoden. Dejlig funktion, er det ikke?

En af de største fordele ved lokale funktioner er indkapsling - en lokal funktion kan kun kaldes fra dens lukkende type. Bemærk, at hvis du har en privat metode i din klasse, kan ethvert medlem af klassen påberåbe sig den private metode.