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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top