Programování

C # 7 do hloubky: Zkoumání místních funkcí

Podpora místních funkcí je vynikající nová funkce, která byla zavedena v C # 7. Všimněte si, že můžete definovat místní funkce uvnitř jakékoli metody, konstruktoru třídy nebo uvnitř vlastnosti - jak getter, tak setter. Když je kompilován kompilátorem C #, místní funkce se transformuje na soukromou metodu.

Při vývoji aplikací možná budete muset vytvořit metody, které se znovu nepoužívají - potřebujete je jen kvůli modularitě. Možná nebudete chtít, aby vaše metody byly tak dlouhé, protože jejich údržba by se postupem času stala noční můrou. Mohli byste však nakonec mít mnoho soukromých metod, které by nebyly znovu použity, že? Tato nová funkce v C # 7 přijde na pomoc za takových okolností - můžete definovat funkce, které jsou lokální pro jiný obor, nebo to může být uvnitř jiné funkce nebo dokonce uvnitř vlastnosti (jak getter, tak setter).

Představte si situaci, kdy byste potřebovali pomocnou funkci, která by byla vyvolána jen jednou. Předtím, než byl C # 7, jste toho mohli dosáhnout pomocí Func a Action typů s anonymními metodami. Bylo však několik výzev. Nepodporovali obecné parametry, parametry a parametry ref a out.

S C # 7 kolem můžete nyní deklarovat takové funkce uvnitř jiného těla jiné funkce. Takové funkce jsou známé jako místní funkce. Jinými slovy, podpora místních funkcí umožňuje definovat funkci v rámci jiné funkce.

Implementace místních funkcí v C #

Napíšeme nějaký kód a podívejme se, jak fungují místní funkce. Zvažte následující fragment kódu. Všimněte si, že metoda Sum je definována uvnitř těla Main metody v následujícím fragmentu kódu.

static void Main (řetězec [] args)

        {

int součet (int x, int y)

            {

návrat x + y;

            }

Console.WriteLine (součet (10, 20));

Console.ReadKey ();

        }

V tomto příkladu je metoda Sum lokální funkcí - je lokální pro Main metodu. Jinými slovy lze metodu Sum použít pouze uvnitř metody Main, tj. Metody, ve které byla definována.

Místní funkce mohou mít všechny funkce běžné metody kromě toho, že místní funkce nemohou mít statickou povahu. Místní funkce může být dokonce asynchronní a může mít také přístup k proměnným z přiloženého bloku. Parametry a místní proměnné ohraničujícího rozsahu lze použít uvnitř místní funkce, podobně jako výrazy lambda. Je třeba poznamenat, že zachycené místní proměnné jsou předávány místní funkci odkazem. Zde je další příklad, který ilustruje, jak může místní funkce přistupovat k proměnným svého uzavírajícího typu.

public static void Display (řetězec str)

        {

int ctr = 5;

DisplayText ();

void DisplayText ()

            {

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

Console.WriteLine (str);

            }

        }

Nyní se podívejte na fragment kódu uvedený výše. Metoda Display obsahuje parametr řetězce a celočíselnou proměnnou uvnitř. Všimněte si, že místní funkce definovaná uvnitř metody Display (pojmenovaná DisplayText) může mít přístup k lokálním proměnným a také argument metody Display. Pěkná funkce, že?

Jednou z hlavních výhod místních funkcí je zapouzdření - místní funkci lze volat pouze z jejího uzavírajícího typu. Všimněte si, že pokud máte ve své třídě soukromou metodu, kterýkoli člen třídy může vyvolat soukromou metodu.