C # fornece a ref
ea out
palavra-chave para argumentos fazer para ser passado por referência. A semântica dos dois é muito semelhante. A única diferença está na inicialização da variável flaged:
ref
requer que a variável seja inicializada antes de passá-la para a função,out
não.out
requer que a variável seja inicializada dentro da função,ref
não.
Os casos de uso dessas duas palavras-chave também são quase os mesmos, e seu uso muito frequente é considerado um cheiro de código (embora existam casos de uso válidos, como os padrões TryParse
e TryGetValue
).
Por isso, alguém poderia explicar, por que existem duas ferramentas muito semelhantes em C # para casos de uso tão restritos?
Além disso, no MSDN , afirma-se que eles têm um comportamento de tempo de execução diferente:
Embora as palavras-chave ref e out causem um comportamento de tempo de execução diferente, elas não são consideradas parte da assinatura do método no tempo de compilação.
Qual a diferença entre o comportamento em tempo de execução?
Conclusão
Ambas as respostas parecem corretas, obrigado a ambos. Aceitei o jmoreno porque é mais explícito.
ref
em C ++; para ponteiros para o ponteiro de objeto (ou primitivo) em questão. ieInt32.TryParse(myStr, out myInt)
(C #) é "executado" da mesma maneira queint32_tryParse(myStr, &myInt)
(C) seria; a única diferença são algumas restrições impostas pelo compilador para evitar bugs. (Eu não vou postar isso como uma resposta porque eu posso estar errado sobre como isso funciona nos bastidores, mas é assim que eu imagino ele funciona [porque faz sentido])