C # fornisce la ref
e la out
keyword per rendere gli argomenti da passare per riferimento. La semantica dei due è molto simile. L'unica differenza è nell'inizializzazione della variabile flaged:
-
ref
richiede che la variabile venga inizializzata prima di passarla alla funzione,out
non lo fa. -
out
richiede che la variabile venga inizializzata all'interno della funzione,ref
no.
Anche i casi d'uso di queste due parole chiave sono quasi gli stessi, e il loro utilizzo troppo frequente è considerato un odore di codice (sebbene ci siano casi d'uso validi come TryParse
e TryGetValue
patterns).
Per questo qualcuno potrebbe spiegare, perché ci sono due strumenti molto simili in C # per casi d'uso così stretti?
Inoltre, su MSDN , si afferma che hanno un comportamento di runtime differente:
Although the ref and out keywords cause different run-time behavior, they are not considered part of the method signature at compile time.
In che modo il loro comportamento in fase di esecuzione è diverso?
Conclusione
Entrambe le risposte sembrano corrette, grazie a entrambi. Ho accettato jmoreno perché è più esplicito.