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.Nownu se compilează. FoloseșteDateTime? data = nullșidata ??= 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.