如何在C#中"做"ByVal

Jou*_*aas 22 c# vb.net byref byval

据我了解,C#通过引用将参数传递给方法.在VB.NET中,您可以使用ByVal和ByRef指定它.默认为ByVal.

这是为了与Visual Basic 6.0兼容,还是随机的?另外,如何指定在C#中使用的内容?我有点像按值传递参数的想法.

Mar*_*ell 53

默认情况下,C#中的参数按传递.没有修饰符可以使这个显式,但是如果你添加ref/ out参数是by-reference.

这里通常的混淆是:

  • 按值传递值类型(调用者看不到值类型的更改,但理想情况下值类型应该是不可变的)
  • 通过引用传递值类型(对值类型的更改对调用者是可见的,但值类型理想情况下应该是不可变的 - 所以重要的是我会说两次; p)
  • 通过值传递引用(对于调用者可以看到对ref类型的字段/属性的更改,但是 ref-type 重新分配给新的/不同的对象是可见的)
  • 通过引用传递引用(更改为字段/属性,重新分配引用对调用者可见)


Tim*_*man 13

传递值是C#中的默认值.但是,如果传递的变量是引用类型,那么您将按值传递引用.这可能是你困惑的根源.

基本上,如果按值传递引用,则可以更改它引用的对象,并且这些更改将保留在方法之外,但是您不能使变量引用另一个对象并使该更改在方法之外保留.

  • 您的答案仍然具有一定的价值,因为它直接解决了修改引用和修改实例之间的区别.此外,最好不要将自己与50 + k排名的"人"进行比较:我认为Reed是由Google运营的AI,而其他大部分同样都是非人类.:-) (2认同)

Ree*_*sey 7

默认情况下,C#中的参数传递"ByVal".如果您想要不同的行为,则必须指定"ref"或"out".