Programavimas

C # 7 nuodugniai: vietinių funkcijų tyrimas

Vietinių funkcijų palaikymas yra puiki nauja funkcija, pristatyta C # 7. Atkreipkite dėmesį, kad vietines funkcijas galite apibrėžti bet kuriame metode, klasės konstruktoriuje arba nuosavybės viduje - ir „getter“, ir „seter“. Kai ją kompiliuoja kompiliatorius C #, vietinė funkcija transformuojama į privatų metodą.

Kurdami programas dažnai gali tekti kurti metodus, kurie nėra pakartotinai naudojami - jums jų reikia tik moduliacijai. Galbūt nenorite, kad jūsų metodai būtų ilgi, nes laikantis tokių metodų, ilgainiui tai taptų košmaru. Tačiau galų gale turėsite daug privačių metodų, kurie nebūtų pakartotinai naudojami, tiesa? Ši nauja C # 7 funkcija ateina į pagalbą tokiomis aplinkybėmis - galite apibrėžti funkcijas, kurios yra lokalios kitoje srityje, arba gali būti kitos funkcijos viduje arba net nuosavybės (tiek „Getter“, tiek „Setter“) viduje.

Įsivaizduokite situaciją, kai jums prireiks pagalbinės funkcijos, kuri būtų iškviesta tik vieną kartą. Prieš pasirodant C # 7, jūs galėtumėte tai pasiekti naudodami „Func“ ir „Action“ tipus anoniminiais metodais. Tačiau buvo keletas iššūkių. Jie nepalaikė generinių vaistų, parametrų ir ref and out parametrų.

Kai šalia yra C # 7, dabar galite tokias funkcijas deklaruoti kitos funkcijos viduje. Tokios funkcijos yra žinomos kaip vietinės funkcijos. Kitaip tariant, vietinių funkcijų palaikymas leidžia apibrėžti funkciją kitos funkcijos srityje.

Vietinių funkcijų įgyvendinimas C #

Parašykime kodą ir pažiūrėkime, kaip veikia vietinės funkcijos. Apsvarstykite šį kodo fragmentą. Atminkite, kad metodas „Sum“ yra apibrėžtas pagrindinio metodo tekste toliau pateiktame kodo fragmente.

static void Main (string [] args)

        {

int suma (int x, int y)

            {

grįžti x + y;

            }

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

Pultas.ReadKey ();

        }

Šiame pavyzdyje sumos metodas yra vietinė funkcija - ji yra lokali pagrindiniam metodui. Kitaip tariant, sumos metodas gali būti naudojamas tik pagrindinio metodo viduje, t. Y. Metodo, kurio viduje jis buvo apibrėžtas, viduje.

Vietinės funkcijos gali turėti visas įprasto metodo savybes, išskyrus tai, kad vietinės funkcijos negali būti statinio pobūdžio. Vietinė funkcija netgi gali būti asinchroninė ir taip pat gali turėti prieigą prie kintamųjų iš uždarojo bloko. Parametrai ir vietiniai kintamieji, apimantys taikymo sritį, gali būti naudojami vietinės funkcijos viduje, panašiai kaip lambda išraiškos. Reikėtų pažymėti, kad užfiksuoti vietiniai kintamieji perduodami vietinei funkcijai remiantis nuoroda. Štai dar vienas pavyzdys, iliustruojantis, kaip vietinė funkcija gali pasiekti savo uždarojo tipo kintamuosius.

public static void Display (eilutė str)

        {

int ctr = 5;

„DisplayText“ ();

negaliojantis „DisplayText“ ()

            {

už (int i = 0; i <ctr; i ++)

Console.WriteLine (str);

            }

        }

Dabar žiūrėkite aukščiau pateiktą kodo fragmentą. Metode „Display“ yra eilutės parametras ir sveikojo skaičiaus kintamasis. Atkreipkite dėmesį, kad „Display“ metodo viduje apibrėžta vietinė funkcija (pavadinta „DisplayText“) gali turėti prieigą prie vietinių kintamųjų ir metodo „Display“ argumento. Puiki savybė, ar ne?

Vienas iš pagrindinių vietinių funkcijų privalumų yra kapsuliavimas - vietinę funkciją galima iškviesti tik iš jos uždarymo tipo. Atminkite, kad jei jūsų klasėje yra privatus metodas, bet kuris klasės narys gali pasinaudoti privačiu metodu.

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