Programiranje

C # 7 poglobljeno: raziskovanje lokalnih funkcij

Podpora za lokalne funkcije je odlična nova funkcija, ki je bila predstavljena v C # 7. Upoštevajte, da lahko lokalne funkcije definirate znotraj katere koli metode, konstruktorja razreda ali znotraj lastnosti - tako getter kot setter. Ko jo prevede prevajalnik C #, se lokalna funkcija spremeni v zasebno metodo.

Pri razvoju aplikacij boste morda pogosto morali ustvariti metode, ki se ne uporabljajo več - potrebujete jih le zaradi modularnosti. Morda ne želite, da bi bile vaše metode dolge, saj bi njihovo vzdrževanje sčasoma postalo nočna mora. Vendar pa boste na koncu morda imeli veliko zasebnih metod, ki jih ne bi mogli ponovno uporabiti, kajne? Ta nova funkcija v C # 7 priskoči na pomoč v takih okoliščinah - lahko določite funkcije, ki so lokalne za drug obseg, ali pa je znotraj druge funkcije ali celo znotraj lastnosti (tako getter kot setter).

Predstavljajte si situacijo, ko bi potrebovali pomožno funkcijo, ki bi bila poklicana samo enkrat. Preden je bil C # 7 prisoten, ste to lahko dosegli z uporabo tipov Func in Action z anonimnimi metodami. Vendar je bilo nekaj izzivov. Niso podpirali generikov, parametrov in parametrov ref in out.

Ko je C # 7 okrog, lahko zdaj te funkcije prijavite v drugem telesu druge funkcije. Takšne funkcije so znane kot lokalne funkcije. Z drugimi besedami, podpora za lokalne funkcije vam omogoča, da določite funkcijo v obsegu druge funkcije.

Izvajanje lokalnih funkcij v jeziku C #

Napišimo nekaj kode in poglejmo, kako delujejo lokalne funkcije. Upoštevajte naslednji delček kode. Upoštevajte, da je metoda Sum določena znotraj telesa metode Main v delčku kode, ki sledi.

statična praznina Main (string [] args)

        {

int vsota (int x, int y)

            {

vrnitev x + y;

            }

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

Console.ReadKey ();

        }

V tem primeru je metoda Sum lokalna funkcija - lokalna je za metodo Main. Z drugimi besedami, metodo Sum lahko uporabljamo samo znotraj metode Main, tj. Metode, znotraj katere je bila definirana.

Lokalne funkcije imajo lahko vse značilnosti običajne metode, le da lokalne funkcije ne morejo biti statične. Lokalna funkcija je lahko celo asinhrona in ima dostop do spremenljivk tudi iz zaprtega bloka. Parametre in lokalne spremenljivke obsega, ki ga zajema, je mogoče uporabiti znotraj lokalne funkcije, podobno kot lambda izrazi. Upoštevati je treba, da se zajete lokalne spremenljivke posredujejo lokalni funkciji s sklicem. Tu je še en primer, ki ponazarja, kako lahko lokalna funkcija dostopa do spremenljivk svojega zaprtega tipa.

javni statični prazen prikaz (niz str)

        {

int ctr = 5;

DisplayText ();

void DisplayText ()

            {

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

Console.WriteLine (str);

            }

        }

Zdaj glejte zgoraj navedeni delček kode. Metoda Display vsebuje parameter niza in v njem celoštevilčno spremenljivko. Upoštevajte, da ima lokalna funkcija, definirana znotraj metode Display (imenovana DisplayText), dostop do lokalnih spremenljivk in tudi argument metode Display. Lepa lastnost, kajne?

Ena glavnih prednosti lokalnih funkcij je enkapsulacija - lokalno funkcijo lahko pokličete samo iz zaprtega tipa. Če imate v svojem razredu zasebno metodo, lahko kateri koli član razreda prikliče zasebno metodo.

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