C # tiene las palabras clave out
y ref
. ¿Por qué se requieren estos dos? Descargo de responsabilidad: no tengo un conocimiento profundo de C #.
c#
parameters
keywords
Neo
fuente
fuente
ref
yout
? ¿O se pregunta cuál es el uso de los argumentos por referenciaref
/out
en comparación con los argumentos por valor (sin modificador del parámetro)? ¿O ambos?Respuestas:
En cuanto a la implementación, son esencialmente lo mismo, pero
out
comunican algo queref
no lo hace: a usted no le importan las entradas. Esto significa ciertas cosas para usted y para las herramientas. Por ejemplo, puede pasar una variable no inicializada a unout
parámetro y eso no es un problema, de lo contrario sería, y dentro de la función debe asignar un valor alout
parámetro antes de que regrese, mientras que no es necesario hacer nada en Todo con unref
valor.fuente
out
le da una manera de hacerlo que mejor coincida con la forma en que desea tratar las variables en primer lugar.out
parámetro porque la función que lo recibe no va a leerlo .Para comprender estas dos palabras clave, deberá comprender qué significa pasar un valor por referencia . Esencialmente significa que, si modifica la variable de parámetro que pasa dentro del método o función, esa variable retiene su valor modificado cuando finaliza su función. Declarar un parámetro como
ref
oout
logra esto, mientras que una variable de parámetro ordinaria retendría su valor original, incluso si lo modificara en la función.La única diferencia entre
ref
yout
es queout
no requiere que inicialice la variable antes de pasarla a la función, peroref
sí; mientras queout
hace que tenga que ceder algo a la variable dentro de la función, peroref
no lo hace.fuente
Tu preguntaste.
Y la respuesta es que no son OBLIGATORIAS, por ejemplo, Java tampoco tiene y VB solo tiene ref (y solo lo requiere en la declaración del método).
Puede escribir fácilmente un programa completo sin usar ninguno.
Existen porque ocasionalmente son útiles. Es por eso que hay dos de ellos y no solo uno, porque es útil hacer la distinción entre 'aquí hay algo, modificarlo si quieres' y 'darle un nuevo valor a esta cosa'.
Otros idiomas tienen prioridades diferentes y, por lo tanto, pueden incluir o no estos o equivalentes. Incluso pueden estar en desacuerdo sobre si alguno es útil, por lo que pueden decidir activamente NO implementar uno u otro.
fuente
En su esencia tanto
ref
yout
proporcionar un mecanismo para pasar la dirección de una variable a un método para que pueda ser actualizado - asignar a laref
oout
parámetro actualiza la variable en el contexto del llamador. Donde difieren es en las garantías:out
garantiza que la variable se actualizará,ref
no.Desde el otro lado de la llamada hay diferencias similares.
out
No se garantiza que un parámetro de nuestro método contenga nada útil a la llegada y debe establecerse en un valor en algún momento, mientrasref
que se puede suponer que un parámetro tiene un valor y no necesitamos hacer nada específico con él.Esta diferencia tiene un impacto en el análisis, la generación y la optimización del código que, aunque no es muy evidente para nosotros la mayor parte del tiempo, puede tener algunos efectos en la forma en que nuestros programas terminan operando. El generador de código puede diferir la asignación de la variable hasta inmediatamente antes de la llamada, el optimizador puede decidir que puede reordenar algunas operaciones de manera más efectiva en función del contrato, etc.
En términos de uso: como regla general, lo uso
out
para situaciones en las que no me importa el contenido de la variable cuando llega como parámetro yref
cuando lo hago.fuente