Parametri opționali și argumente numite în C# (.NET)

Parametrii cu valoare implicită pot lipsi la apel; argumentele numite (nume: valoare) se pot da în orice ordine.

Sintaxă C#
void Trimite(string text, int prioritate = 1, bool urgent = false)  // apel: Trimite("x", urgent: true)

Ce face Parametri opționali și argumente numite

Un parametru devine opțional când primește o valoare implicită în declarație: int cantitate = 1. Valoarea trebuie să fie o constantă de compilare (număr, șir, null, default), iar parametrii opționali stau după cei obligatorii.

La apel poți scrie numele parametrului urmat de două puncte: Rezerva("Ana", nopti: 3). Așa sari peste parametri opționali din mijloc și faci apelurile cu multe valori bool ușor de citit.

Parametri

Parametru Descriere
tip nume = valoare Parametru opțional; valoarea se folosește când argumentul lipsește.
nume: valoare Argument numit, la apel.

Exemple

Exemplul 1: Rezervare cu valori implicite

Rezerva("Ana");
Rezerva("Mihai", 3);
Rezerva("Ioana", micDejun: true);
Rezerva(nopti: 2, client: "Radu");

static void Rezerva(string client, int nopti = 1, bool micDejun = false)
{
    string extra = micDejun ? ", cu mic dejun" : "";
    Console.WriteLine($"{client}, nopți: {nopti}{extra}");
}

Rezultat

Ana, nopți: 1
Mihai, nopți: 3
Ioana, nopți: 1, cu mic dejun
Radu, nopți: 2

Exemplul 2: Argumente numite pentru valori bool

Export(true, false) nu spune nimic cititorului; cu nume, apelul se explică singur.

Export("raport.csv", includeAntet: true, comprima: false);

static void Export(string fisier, bool includeAntet = true, bool comprima = false)
{
    Console.WriteLine($"{fisier} | antet: {includeAntet} | arhivă: {comprima}");
}

Rezultat

raport.csv | antet: True | arhivă: False

Greșeli frecvente

  • Valoarea implicită nu poate fi calculată la rulare: DateTime data = DateTime.Now nu se compilează. Folosește DateTime? data = null și data ??= DateTime.Now în corp.
  • Valoarea implicită se copiază în codul care apelează. Dacă o schimbi într-o bibliotecă, proiectele care o folosesc o primesc pe cea nouă abia după recompilare.
  • După un argument numit pus în afara poziției lui nu mai poți da argumente poziționale.

Comenzi înrudite

  • Metode (static, void, return): O metodă grupează cod reutilizabil sub un nume: primește parametri, poate returna o valoare cu return sau nimic (void).
  • params: Permite unei metode să primească oricâte argumente de același tip, separate prin virgulă, fără să creezi tu tabloul.
  • Constructori (this, supraîncărcare, static): Constructorul inițializează un obiect creat cu new; poate avea variante, poate apela altă variantă cu : this(…) și există și constructor static.