25

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

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

4

3 回答 3

59

C# 中的参数默认按值传递。没有修饰符可以明确说明,但如果添加ref/out参数是引用。

这里通常的混淆是:

  • 按值传递值类型(调用者看不到值类型的更改,但理想情况下,值类型无论如何都应该是不可变的)
  • 通过引用传递值类型(调用者可以看到对值类型的更改,但值类型在理想情况下应该是不可变的 - 所以很重要,我会说两次;p)
  • 按值传递引用(对 ref 类型的字段/属性的更改对调用者可见,但将 ref 类型重新分配给新的/不同的对象是可见的)
  • 通过引用传递引用(对字段/属性的更改以及重新分配引用对调用者可见)
于 2010-06-14T20:08:08.943 回答
13

按值传递是 C# 中的默认值。但是,如果要传递的变量是引用类型,那么您是按值传递引用。这也许是你困惑的根源。

基本上,如果您通过值传递引用,那么您可以更改它所引用的对象,这些更改将在方法之外持续存在,但您不能让变量引用不同的对象并使该更改在方法之外持续存在。

于 2010-06-14T20:11:33.997 回答
7

C# 中的参数默认通过“ByVal”传递。如果你想要不同的行为,你必须指定“ref”或“out”。

于 2010-06-14T20:07:57.057 回答