Metode (static, void, return) în C# (.NET)

O metodă grupează cod reutilizabil sub un nume: primește parametri, poate returna o valoare cu return sau nimic (void).

Sintaxă C#
static TipReturnat Nume(Tip parametru) { return valoare; }

Ce face Metode (static, void, return)

O metodă are un tip returnat (sau void când nu returnează nimic), un nume scris în PascalCase și o listă de parametri. return încheie metoda și trimite valoarea înapoi celui care a apelat-o. Metodele cu un singur rând se pot scrie cu săgeată: static int Dublu(int x) => x * 2;.

În programele cu instrucțiuni de nivel superior (fișierul Program.cs fără clasă Main), metodele declarate direct în fișier sunt funcții locale și se pot apela de oriunde din acel cod. În clase, metodele static se apelează pe tip (Calcul.Tva(100)), iar cele fără static pe un obiect.

Mai multe metode pot avea același nume dacă diferă lista de parametri (supraîncărcare, overloading). Compilatorul alege varianta după tipurile argumentelor.

Parametri

Parametru Descriere
TipReturnat int, string, o clasă, Task pentru metode async sau void.
parametri Zero sau mai mulți, separați prin virgulă, fiecare cu tip și nume.

Ce returnează

Valoarea din return, de tipul declarat; nimic la void.

Exemple

Exemplul 1: Metode statice într-o clasă

Pret are două variante (supraîncărcare): cu sau fără reducere.

Console.WriteLine(Magazin.Pret(200));
Console.WriteLine(Magazin.Pret(200, 50));
Magazin.Afiseaza("Ana");

static class Magazin
{
    public static int Pret(int baza) => baza + baza * 19 / 100;

    public static int Pret(int baza, int reducere)
    {
        int cuTva = Pret(baza);
        return cuTva - reducere;
    }

    public static void Afiseaza(string client)
    {
        Console.WriteLine($"Comanda pentru {client} a fost înregistrată.");
    }
}

Rezultat

238
188
Comanda pentru Ana a fost înregistrată.

Exemplul 2: return devreme

return poate apărea de mai multe ori; prima atinsă încheie metoda.

Console.WriteLine(Categorie(5));
Console.WriteLine(Categorie(15));
Console.WriteLine(Categorie(70));

static string Categorie(int varsta)
{
    if (varsta < 14)
        return "copil";
    if (varsta < 18)
        return "adolescent";
    return "adult";
}

Rezultat

copil
adolescent
adult

Greșeli frecvente

  • O metodă cu tip returnat care nu are return pe toate drumurile dă eroarea CS0161 (not all code paths return a value).
  • Apelarea unei metode de instanță pe tip (Cont.Depune(10)) fără obiect nu se compilează. Creează obiectul cu new sau marchează metoda static.
  • Supraîncărcarea după tipul returnat nu e permisă: două metode Pret(int) care diferă doar prin ce returnează intră în conflict.

Comenzi înrudite

  • Parametri opționali și argumente numite: Parametrii cu valoare implicită pot lipsi la apel; argumentele numite (nume: valoare) se pot da în orice ordine.
  • ref, out și in: Transmit un argument prin referință: ref îl poate citi și modifica, out trebuie setat de metodă, in este doar pentru citire.
  • params: Permite unei metode să primească oricâte argumente de același tip, separate prin virgulă, fără să creezi tu tabloul.
  • Funcții locale: O funcție declarată în interiorul unei metode, vizibilă doar acolo; poate folosi variabilele metodei, iar cu static nu le poate atinge.