C # proporciona la refy la outpalabra clave para hacer que los argumentos se pasen por referencia. La semántica de los dos es muy similar. La única diferencia está en la inicialización de la variable con bridas:
refrequiere que la variable se inicialice antes de pasarla a la función,outno lo hace.outrequiere que la variable se inicialice dentro de la función,refno.
Los casos de uso de estas dos palabras clave también son casi los mismos, y su uso demasiado frecuente es considerado un olor a código (aunque hay casos de uso válidos como el TryParsey los TryGetValuepatrones).
Debido a esto, alguien podría explicar, ¿por qué hay dos herramientas muy similares en C # para casos de uso tan limitados?
Además, en MSDN , se afirma que tienen un comportamiento de tiempo de ejecución diferente:
Aunque las palabras clave ref y out provocan un comportamiento de tiempo de ejecución diferente, no se consideran parte de la firma del método en tiempo de compilación.
¿Cómo es diferente su comportamiento en tiempo de ejecución?
Conclusión
Ambas respuestas parecen correctas, gracias a ambos. Acepté jmoreno 's porque es más explícito.
refen C ++; a punteros al puntero de objeto (o primitivo) en cuestión. es decir,Int32.TryParse(myStr, out myInt)(C #) se "ejecuta" de la misma manera que loint32_tryParse(myStr, &myInt)haría (C); La única diferencia son algunas restricciones impuestas por el compilador para evitar errores. (No voy a publicar esto como respuesta porque puedo estar equivocado acerca de cómo funciona esto detrás de escena, pero así es como imagino que funciona [porque tiene sentido])