Comment "faire" ByVal en C#

Ce que je comprends, C# passe les paramètres dans les méthodes de référence. Dans VB.NET vous pouvez spécifier cette avec ByVal et ByRef. La valeur par défaut est ByVal.

Est-ce pour la compatibilité avec Visual Basic 6.0, ou est-ce un simple hasard? Aussi, comment puis-je spécifier les éléments à utiliser en C#? J'aime bien l'idée d'un passage de paramètres par valeur.

  • Voir pobox.com/~skeet/csharp/parameters.html pour les détails de la configuration par défaut etc.
  • Bonne réponse, Jon, mais vous êtes aussi une IA!
  • En vb6, les paramètres ont été passés en tant que ByRef en l'absence de la ByVal mot-clé. Dans .net les langues, la valeur par défaut est par valeur. Afin de faciliter la migration et d'éviter la confusion, vb.net exige que les paramètres soient explicitement marqué ByRef ou ByVal, mais la VS éditeur de "s'auto-corriger" paramètres sans ce marquage par adjonction de", ByVal". Parce qu'il n'a jamais été C#-ish langue qui avait passé par-ref que le comportement par défaut, il n'y a aucun problème tout simplement en disant que non marquées sont les paramètres par valeur.
  • Merci @supercat pour l'histoire/contexte. Je me suis toujours demandé pourquoi j'avais explicitement état ByVal quand c'est ce que je voulais dire 99% du temps. Toujours pensé que c'était une sorte de silly - en connaissance de cause fait sentir un peu moins bête 😉
  • Je trouve ça assez ironique de constater que, bien que la valeur par défaut-byref comportement de la transmission de paramètres dans VB/QBasic a longtemps été reconnu comme une erreur, les bouchons dans les deux VB6 et C# sont fait par référence "par défaut" [la seule façon de spécifier la valeur est de créer de nouvelles variables pour une utilisation par des fermetures]. Java permet uniquement par valeur, et nécessite fermé plus de variables pour être déclaré final; ma préférence serait d'exiger que fermé plus de variables soit marqué readonly [équivalent à final] ou encore explicitement déclaré comme étant capturable par référence, mais je n'ai pas de conception les langues.