Cuprins >> Funcții > Funcții și metode locale
Articol de importanță mică, sau discuție

Metodele locale sunt metode pe care le definiți în interiorul altei metode. Acestea pot fi folosite pentru a împărți un cod complex în bucăți mai mici și mai ușor de gestionat. Vă puteți gândi la ele ca metode ajutătoare care efectuează sarcini specifice, simplificând metoda părinte.

Au fost introduse în versiunea C# 7 și le puteți considera ca fiind funcții private ale unei metode sau funcții deja existente, având domeniul de definiție limitat la corpul metodei sau funcției care le cuprinde. Asta înseamnă că le puteți apela numai din interiorul corpului metodei/funcției părinte.

Iată un exemplu simplu de metodă locală și modul în care o putem folosi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
 
namespace ProiectulMeu
{
    class Program
    {
        static void Main(string[] args)
        {
            void PrinteazaText(string text)
            {
                Console.WriteLine(text);
            }
            
            PrinteazaText("Buna Lume!");
        }
    }
}

Iar acesta este un exemplu de funcție locală:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
 
namespace ProiectulMeu
{
    class Program
    {
        static void Main(string[] args)
        {
            int AdunaNumere(int x, int y)
            {
                return x + y;
            }
            
            int result = AdunaNumere(3, 7);
        }
    }
}

Deci, ele arată și se comportă ca metodele și funcțiile normale, dar, desigur, există câteva diferențe:

  • Puteți declara metode și funcții locale în metode și funcții normale, constructori, finalizatori, accesori de proprietăți, accesori de evenimente, metode anonime, expresii lambda, și chiar alte funcții locale.
  • Metodele și funcțiile locale permit utilizarea cuvintelor cheie async și unsafe.
  • Așa cum s-a explicat în lecția despre domeniul de definitie al variabilelor, membrii sunt vizibili în blocul de cod în care sunt declarați și în interiorul oricărui bloc de cod copil imbricat, dar nu în exteriorul celui în care sunt declarați. Acest lucru este valabil și pentru metodele și funcțiile locale, și înseamnă și că orice parametru sau variabilă locală a membrului părinte care le conține, este vizibil și în interiorul lor.
  • Nu pot fi statice, nu vă este permis să specificați orice fel de modificatori de access, și, așa cum ați ghicit, ele sunt în mod implicit private.
  • Nici ele si nici parametrii lor nu pot avea atribute.
  • Nu le puteți supraîncărca.
  • Când folosiți declarații de nivel superior, orice metodă sau funcție declarată este automat locală.
  • Pot fi generice.
  • Pot folosi parametri ref și out.

La fel ca metodele și funcțiile normale, cele locale pot fi scrise folosind sintaxa corpurilor de tip expresie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
 
namespace ProiectulMeu
{
    class Program
    {
        static void Main(string[] args)
        {
            void PrinteazaText(string text) => Console.WriteLine(text);
            
            PrinteazaText("Buna Lume!");
        }
    }
}

Cu toate acestea, nu aveți voie să declarați metode și funcții locale în membrii cu corp de tip expresie.