Programovanie

C # 7 in depth: Exploring local functions

Podpora miestnych funkcií je vynikajúca nová funkcia, ktorá bola predstavená v C # 7. Všimnite si, že miestne funkcie môžete definovať vo vnútri akejkoľvek metódy, konštruktora triedy alebo vo vnútri vlastnosti - getra aj setra. Keď je kompilovaný kompilátorom C #, miestna funkcia sa transformuje na súkromnú metódu.

Pri vývoji aplikácií možno budete musieť vytvoriť metódy, ktoré sa nebudú opakovane používať - ​​potrebujete ich iba kvôli modularite. Možno nebudete chcieť, aby vaše metódy boli dlhé, pretože ich údržba by sa časom stala nočnou morou. Môžete však skončiť s mnohými súkromnými metódami, ktoré by sa opakovane nepoužívali, však? Táto nová funkcia v C # 7 prichádza na pomoc za takýchto okolností - môžete definovať funkcie, ktoré sú lokálne pre iný rozsah, alebo môžu byť vo vnútri inej funkcie alebo dokonca vo vnútri vlastnosti (getter aj setter).

Predstavte si situáciu, že by ste potrebovali pomocnú funkciu, ktorá by sa zavolala iba raz. Predtým, ako bol C # 7, ste to mohli dosiahnuť pomocou typov Func a Action pomocou anonymných metód. Bolo tu však niekoľko výziev. Nepodporovali generické parametre, parametre a parametre ref a out.

Keď je okolo C # 7, môžete teraz tieto funkcie deklarovať vo vnútri iného tela inej funkcie. Takéto funkcie sú známe ako miestne funkcie. Inými slovami, podpora miestnych funkcií umožňuje definovať funkciu v rozsahu inej funkcie.

Implementácia miestnych funkcií v C #

Poďme napísať nejaký kód a pozrime sa, ako fungujú miestne funkcie. Zvážte nasledujúci úryvok kódu. Upozorňujeme, že metóda Sum je definovaná v tele hlavnej metódy v nasledujúcom útržku kódu.

static void Main (reťazec [] args)

        {

int suma (int x, int y)

            {

návrat x + y;

            }

Console.WriteLine (súčet (10, 20));

Console.ReadKey ();

        }

V tomto príklade je metóda Sum miestnou funkciou - je lokálna pre metódu Main. Inými slovami, metódu Sum je možné použiť iba vo vnútri metódy Main, t. J. Metódy, v ktorej bola definovaná.

Lokálne funkcie môžu mať všetky znaky bežnej metódy okrem toho, že miestne funkcie nemôžu mať statický charakter. Lokálna funkcia môže byť dokonca asynchrónna a môže mať prístup k premenným aj z priloženého bloku. Parametre a miestne premenné ohraničujúceho rozsahu možno použiť vo vnútri miestnej funkcie, podobne ako vo výrazoch lambda. Je potrebné poznamenať, že zachytené lokálne premenné sa odovzdávajú miestnej funkcii odkazom. Tu je ďalší príklad, ktorý ilustruje, ako môže miestna funkcia získať prístup k premenným svojho ohraničujúceho typu.

public static void Display (reťazec str)

        {

int ctr = 5;

DisplayText ();

void DisplayText ()

            {

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

Console.WriteLine (str);

            }

        }

Teraz si pozrite fragment kódu uvedený vyššie. Metóda Display obsahuje parameter reťazca a v ňom celočíselnú premennú. Upozorňujeme, že lokálna funkcia definovaná vo vnútri metódy Display (pomenovaná DisplayText) môže mať prístup k lokálnym premenným a tiež k argumentu metódy Display. Pekná vlastnosť, nie?

Jednou z hlavných výhod miestnych funkcií je zapuzdrenie - miestnu funkciu je možné volať iba z jej ohraničujúceho typu. Upozorňujeme, že ak máte vo svojej triede súkromnú metódu, môže ktorúkoľvek z členov triedy vyvolať súkromná metóda.

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