Comment « faire » ByVal en C #
Question
Si je comprends bien, C # passe des paramètres dans les méthodes de référence. Dans VB.NET, vous pouvez le spécifier avec ByVal et ByRef. La valeur par défaut est ByVal.
Est-ce pour la compatibilité avec Visual Basic 6.0, ou est-il juste au hasard? En outre, comment puis-je préciser ce qu'il faut utiliser en C #? Je aime bien l'idée de paramètres par valeur.
La solution
Paramètres en C # sont, par default passé par valeur. Il n'y a pas de modification pour rendre ce explicite, mais si vous ajoutez ref
/ out
le paramètre est par référence.
La confusion habituelle est ici la différence entre:
- le passage d'une valeur de type en valeur (modification de la valeur de type ne sont pas visibles à l'appelant, mais des types de valeur devrait idéalement être de toute façon immuable)
- le passage d'une valeur de type par référence (modification de la valeur de type sont visibles à l'appelant, mais des types de valeur devraient idéalement être immuable de toute façon - si important que je vais le dire deux fois; p)
- passant une référence par la valeur (variations champs / propriétés du type ref sont visibles à l'appelant, mais réassignation le type ref à une nouvelle / différente objet est pas visible)
- passant une référence par référence (variations des champs / propriétés, et réassigner la référence sont visibles à l'appelant)
Autres conseils
passage par valeur est la valeur par défaut en C #. Toutefois, si la variable passée est de type de référence, vous passez la référence par valeur. Ceci est peut-être l'origine de votre confusion.
En fait, si vous passez une référence en termes de valeur, vous pouvez alors changer l'objet, il fait référence à ces changements et persistera en dehors de la méthode, mais vous ne pouvez pas faire de la variable renvoient à un objet différent et avoir ce changement persistent en dehors de la méthode.
Paramètres en C # sont passés "ByVal" par défaut. Vous devez spécifier « ref » ou « out » si vous voulez un comportement différent.