C # ha le parole chiave out
e ref
. Perché sono richiesti questi due?
Disclaimer: non ho una profonda conoscenza di C #.
Per quanto riguarda l'implementazione, sono essenzialmente la stessa cosa, ma out
comunica qualcosa che ref
non fa: non ti interessa input. Questo significa certe cose per te e agli utensili. Ad esempio, puoi passare una variabile non inizializzata a un parametro out
e questo non è un problema, dove altrimenti sarebbe, e all'interno della funzione ti viene richiesto di assegnare un valore al parametro out
prima che ritorni, mentre c'è nessun requisito per fare nulla con un valore ref
.
Per comprendere queste due parole chiave, devi capire cosa significa passare un valore per riferimento . In sostanza significa che, se modifichi la variabile parametro che passi in all'interno del metodo o della funzione, quella variabile mantiene il valore modificato quando la tua funzione termina. Dichiarazione
un parametro come ref
o out
esegue ciò, mentre una variabile di parametro ordinaria manterrebbe il suo valore originale, anche se è stata modificata nella funzione.
Le uniche differenze tra ref
e out
è che out
non richiede di inizializzare la variabile prima di passarla alla funzione, ma ref
; mentre out
fa richiede di assegnare qualcosa alla variabile all'interno della funzione, ma ref
non lo fa.
Hai chiesto.
C# have out and ref, why these two are required. I don't have depth knowledge of C#. Why out and ref parameters are required?
E la risposta è che non sono REQUIRED, java per esempio non ha né e VB ha solo ref (e lo richiede solo nella dichiarazione del metodo).
Puoi facilmente scrivere un intero programma senza usare nessuno dei due.
Esistono perché sono occasionalmente utili. Ecco perché ce ne sono due e non solo uno - perché è utile fare la distinzione tra "qui è qualcosa, modificalo se vuoi" e "dai a questa cosa un nuovo valore".
Altre lingue hanno priorità diverse e quindi possono o non possono includere queste o equivalenti. Possono anche non essere d'accordo sul fatto che sia utile, e così possono decidere attivamente di NON implementare l'uno o l'altro.
Al loro interno sia ref
che out
forniscono un meccanismo per passare l'indirizzo di una variabile a un metodo in modo che possa essere aggiornato - assegnando al parametro ref
o out
aggiorna la variabile nel contesto del chiamante. Dove si differenziano è nelle garanzie: out
garantisce che la variabile verrà aggiornata, ref
no.
Dall'altro lato della chiamata ci sono differenze simili. Un parametro out
per il nostro metodo non è garantito per contenere qualcosa di utile all'arrivo e deve essere impostato su un valore in qualche punto, mentre un parametro ref
può essere assunto per avere un valore e non è necessario fare nulla specifico con esso.
Questa differenza ha un impatto sull'analisi del codice, sulla generazione e sull'ottimizzazione che, sebbene non ci sembrino terribilmente la maggior parte del tempo, possono avere alcuni effetti sul modo in cui i nostri programmi finiscono per funzionare. Il generatore di codice può rinviare l'allocazione della variabile fino a immediatamente prima della chiamata, l'ottimizzatore potrebbe decidere di riordinare alcune operazioni in modo più efficace in base al contratto, ecc.
In termini di utilizzo: come regola generale uso out
per le situazioni in cui non mi interessa il contenuto della variabile quando arriva come parametro e ref
quando lo faccio.
Leggi altre domande sui tag c# parameters keywords