C # fournit le ref
et le out
mot - clé pour faire passer les arguments par référence. La sémantique des deux est très similaire. La seule différence réside dans l'initialisation de la variable flaged:
ref
nécessite que la variable soit initialisée avant de la passer à la fonction,out
ne le fait pas.out
nécessite que la variable soit initialisée à l'intérieur de la fonction,ref
non.
Les cas d'utilisation de ces deux mots clés sont également presque les mêmes, et leur utilisation trop fréquente est, je crois, considérée comme une odeur de code (bien qu'il existe des cas d'utilisation valides comme les modèles TryParse
et TryGetValue
).
Pour cette raison, quelqu'un pourrait-il expliquer pourquoi il existe deux outils très similaires en C # pour des cas d'utilisation aussi étroits?
En outre, sur MSDN , il est indiqué qu'ils ont un comportement d'exécution différent:
Bien que les mots clés ref et out provoquent des comportements d'exécution différents, ils ne sont pas considérés comme faisant partie de la signature de la méthode au moment de la compilation.
En quoi leur comportement à l'exécution est-il différent?
Conclusion
Les deux réponses semblent correctes, merci à vous deux. J'ai accepté les jmoreno parce que c'est plus explicite.
ref
C ++; vers des pointeurs vers le pointeur objet (ou primitif) en question. c'est-à-dire queInt32.TryParse(myStr, out myInt)
(C #) est "exécuté" de la même manière queint32_tryParse(myStr, &myInt)
(C); la seule différence étant certaines contraintes imposées par le compilateur pour éviter les bugs. (Je ne posterai pas cela comme réponse parce que je peux me tromper sur la façon dont cela fonctionne dans les coulisses, mais c'est ainsi que j'envisage que cela fonctionne [parce que cela a du sens])