I metodi sono funzioni definite in una classe. C# supporta ricche funzionalità di parametri — argomenti opzionali/nominati, modificatori ref/out/in, array — e (più metodi con lo stesso nome ma parametri diversi).
I metodi sono funzioni definite in una classe. C# supporta ricche funzionalità di parametri — argomenti opzionali/nominati, modificatori ref/out/in, array — e (più metodi con lo stesso nome ma parametri diversi).
paramspublic int Add(int a, int b) => a + b; // expression-bodied (concise)
public string Greet(string name, string greeting = "Hello") // default parameter
{
return $"{greeting}, {name}";
}
Greet("Ann"); // "Hello, Ann"
Greet("Ann", greeting: "Hi"); // named argument
I metodi specificano un tipo di ritorno, un nome e i parametri. I parametri di default rendono gli argomenti opzionali, e gli argomenti nominati ti permettono di passarli per nome (più chiari, possono saltare gli opzionali).
// ref — pass by reference (method can modify the caller's variable)
void Increment(ref int x) { x++; }
int n = 5; Increment(ref n); // n is now 6
// out — for returning multiple values (must be assigned in the method)
bool TryParse(string s, out int result) { result = ...; return true; }
if (int.TryParse("42", out int value)) { } // the common TryX pattern
// in — pass by reference but READ-ONLY (performance for large structs)
void Process(in LargeStruct data) { }
out è ampiamente utilizzato nel pattern TryParse (restituire un flag di successo più il risultato in modo sicuro); ref permette di modificare la variabile del chiamante; in passa grandi struct efficientemente senza copiarle.
// params — variable number of arguments
int Sum(params int[] numbers) => numbers.Sum();
Sum(1, 2, 3, 4); // any number
// OVERLOADING — same name, different parameters
void Print(int x) { }
void Print(string s) { }
void Print(int x, int y) { }
Print(5); // calls the int version — resolved by argument types
L'overloading permette a più metodi di condividere un nome, distinti dal tipo/numero di parametri — il compilatore sceglie quello corrispondente. params accetta un numero variabile di argomenti.
I metodi sono gli elementi costitutivi del comportamento in C#, e comprendere le loro ricche funzionalità di parametri è importante per scrivere codice flessibile ed espressivo.
Sapere come definire metodi (inclusa la sintassi concisa expression-bodied), usare parametri di default e nominati (per argomenti opzionali e chiamate leggibili), e applicare l'overloading dei metodi (stesso nome, parametri diversi — per API intuitive che gestiscono diversi tipi di argomenti) è conoscenza quotidiana.
I modificatori di parametri sono particolarmente importanti da comprendere: out è ampiamente utilizzato nell'ubiquitario pattern TryParse (int.TryParse(s, out var result) — restituire in modo sicuro un flag di successo e il risultato senza eccezioni, un pattern comune e idiomatico di C#), ref abilita la modifica della variabile del chiamante, e in passa grandi struct per riferimento per le prestazioni.
Comprendere questi aspetti — i metodi, le funzionalità di parametri (opzionali/nominati/params), l'overloading per API flessibili, e i modificatori ref/out/in (in particolare l'idioma TryParse basato su out) — è fondamentale sia per scrivere metodi C# che per usare le molte API .NET che si affidano a queste funzionalità.
Poiché i metodi e i loro parametri sono centrali in tutto il codice C#, e poiché funzionalità come l'overloading, i parametri opzionali e il pattern TryX appaiono costantemente, padroneggiarli è una conoscenza fondamentale e imprescindibile per lo sviluppo efficace in C#.