Programmēšana

C # 7 padziļināti: vietējo funkciju izpēte

Vietējo funkciju atbalsts ir lieliska, jauna funkcija, kas ir ieviesta C # 7. Ņemiet vērā, ka vietējās funkcijas varat definēt jebkuras metodes iekšienē, klases konstruktorā vai rekvizītā - gan getter, gan seter. Kad to sastāda kompilators C #, vietējā funkcija tiek pārveidota par privātu metodi.

Izstrādājot lietojumprogrammas, jums, iespējams, būs jāizveido metodes, kuras netiek atkārtoti izmantotas - tās jums vajadzīgas tikai modularitātes labad. Jūs, iespējams, nevēlaties, lai jūsu metodes būtu ilgstošas, jo šādu metožu uzturēšana laika gaitā kļūtu par murgu. Tomēr jums varētu būt daudz privātu metožu, kuras netiktu izmantotas atkārtoti, vai ne? Šī jaunā C # 7 funkcija nāk talkā šādos apstākļos - jūs varat definēt funkcijas, kas ir lokālas citai jomai, vai arī tās var būt citas funkcijas iekšienē vai pat rekvizītā (gan getter, gan seter).

Iedomājieties situāciju, kad jums būtu nepieciešama palīga funkcija, kuru izsauktu tikai vienu reizi. Pirms C # 7 bija aptuveni, jūs to varētu sasniegt, izmantojot Func un Action veidus ar anonīmām metodēm. Tomēr bija daži izaicinājumi. Viņi neatbalstīja vispārīgos, parametrus un atsauces un izejas parametrus.

Tā kā apkārt ir C # 7, tagad jūs varat deklarēt šādas funkcijas citas funkcijas ķermenī. Šādas funkcijas ir pazīstamas kā vietējās funkcijas. Citiem vārdiem sakot, vietējo funkciju atbalsts ļauj definēt funkciju citas funkcijas darbības jomā.

Vietējo funkciju ieviešana C #

Uzrakstīsim kodu un redzēsim, kā darbojas vietējās funkcijas. Apsveriet šo koda fragmentu. Ņemiet vērā, ka summa Sum ir definēta galvenās metodes pamattekstā iekšpusē esošajā koda fragmentā.

static void Main (virkne [] args)

        {

int summa (int x, int y)

            {

atgriešanās x + y;

            }

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

Console.ReadKey ();

        }

Šajā piemērā summa Sum ir vietēja funkcija - tā ir lokāla galvenajai metodei. Citiem vārdiem sakot, Sum metodi var izmantot tikai Main metodes iekšienē, t.i., metodē, kurā tā ir definēta.

Vietējām funkcijām var būt visas parastās metodes iezīmes, izņemot to, ka vietējām funkcijām nevar būt statisks raksturs. Vietējā funkcija var būt pat asinhrona, un tai var būt arī piekļuve mainīgajiem lielumiem no norobežojošā bloka. Norādošās darbības jomas parametrus un lokālos mainīgos var izmantot lokālās funkcijas iekšienē, līdzīgi kā lambda izteiksmes. Jāatzīmē, ka tvertie lokālie mainīgie tiek nodoti vietējai funkcijai ar atsauci. Šis ir vēl viens piemērs, kas ilustrē, kā vietējā funkcija var piekļūt tās norobežojošā tipa mainīgajiem.

public static void Display (virknes str)

        {

int ctr = 5;

DisplayText ();

void DisplayText ()

            {

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

Console.WriteLine (str);

            }

        }

Tagad skatiet iepriekš sniegto koda fragmentu. Displeja metode satur virknes parametru un tajā veselu skaitli. Ņemiet vērā, ka displeja metodē definētajai vietējai funkcijai (ar nosaukumu DisplayText) var būt piekļuve lokālajiem mainīgajiem un arī displeja metodes argumentam. Jauka funkcija, vai ne?

Viens no galvenajiem vietējo funkciju ieguvumiem ir iekapsulēšana - vietējo funkciju var izsaukt tikai no tās norobežojošā tipa. Ņemiet vērā, ka, ja jūsu klasē ir privāta metode, jebkurš klases dalībnieks var izmantot privāto metodi.