Programmering

C # 7 i dybden: Utforske lokale funksjoner

Støtten for lokale funksjoner er en utmerket ny funksjon som er introdusert i C # 7. Merk at du kan definere lokale funksjoner i hvilken som helst metode, konstruktøren til en klasse eller inne i en eiendom - både getter og setter. Når den er kompilert av C # kompilatoren, blir en lokal funksjon forvandlet til en privat metode.

Når du utvikler applikasjoner, kan det hende du ofte trenger å lage metoder som ikke brukes på nytt - du trenger dem bare for modularitet. Du vil kanskje ikke at metodene dine skal være lange, da vedlikehold av slike metoder vil bli et mareritt over tid. Imidlertid kan du ende opp med å ha mange private metoder som ikke ville bli gjenbrukt, ikke sant? Denne nye funksjonen i C # 7 kommer til unnsetning under slike omstendigheter - du kan definere funksjoner som er lokale for et annet omfang, eller det kan være inne i en annen funksjon eller til og med inne i en eiendom (både getter og setter).

Tenk deg en situasjon der du trenger en hjelperfunksjon som vil bli kalt bare en gang. Før C # 7 var rundt, kunne du ha oppnådd dette ved å bruke Func og Action-typer med anonyme metoder. Imidlertid var det noen få utfordringer. De støttet ikke generiske, params og ref og ut parametere.

Med C # 7 rundt kan du nå erklære slike funksjoner i en annen kropp av en annen funksjon. Slike funksjoner er kjent som lokale funksjoner. Med andre ord, støtten for lokale funksjoner lar deg definere en funksjon innenfor omfanget av en annen funksjon.

Implementering av lokale funksjoner i C #

La oss skrive litt kode og se hvordan lokale funksjoner fungerer. Vurder følgende kodebit. Merk at summetoden er definert inne i hoveddelen av hovedmetoden i kodebiten som følger.

statisk tomrom Main (streng [] args)

        {

int Sum (int x, int y)

            {

returnere x + y;

            }

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

Console.ReadKey ();

        }

I dette eksemplet er Sum-metoden en lokal funksjon - den er lokal til Main-metoden. Med andre ord kan Sum-metoden bare brukes inne i Main-metoden, dvs. metoden der den er definert.

Lokale funksjoner kan ha alle funksjonene til en vanlig metode, bortsett fra at lokale funksjoner ikke kan være statiske. En lokal funksjon kan til og med være asynkron og kan også ha tilgang til variabler fra vedlegg. Parametere og lokale variabler i det vedlagte omfanget kan brukes i en lokal funksjon, i likhet med lambdauttrykk. Det skal bemerkes at fangede lokale variabler overføres til en lokal funksjon ved referanse. Her er et annet eksempel som illustrerer hvordan en lokal funksjon kan få tilgang til variablene av den vedlagte typen.

offentlig statisk ugyldig skjerm (strengstr)

        {

int ctr = 5;

DisplayText ();

ugyldig DisplayText ()

            {

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

Console.WriteLine (str);

            }

        }

Se nå kodebiten gitt ovenfor. Skjermmetoden inneholder en strengparameter og en heltallvariabel i den. Merk at den lokale funksjonen som er definert i skjermmetoden (kalt DisplayText) kan ha tilgang til de lokale variablene og også argumentet til skjermmetoden. Fin funksjon, er det ikke?

En av de største fordelene med lokale funksjoner er innkapsling - en lokal funksjon kan bare kalles fra den innesluttende typen. Merk at hvis du har en privat metode i klassen din, kan ethvert medlem av klassen påberope den private metoden.

$config[zx-auto] not found$config[zx-overlay] not found