代码之家  ›  专栏  ›  技术社区  ›  Jouke van der Maas

如何在C中“执行”ByVal#

  •  22
  • Jouke van der Maas  · 技术社区  · 14 年前

    据我所知,C通过引用将参数传递到方法中。在vb.net中,您可以使用byval和byref来指定它。默认值为ByVal。

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

    3 回复  |  直到 7 年前
        1
  •  53
  •   Marc Gravell    14 年前

    c中的参数是,by 违约 通过值。没有使此显式的修饰符,但如果添加 ref / out 参数是通过引用的。

    这里常见的混淆是:

    • 按值传递值类型(对值类型的更改对调用方不可见,但值类型最好是不可变的)
    • 通过引用传递值类型(调用者可以看到对值类型的更改,但值类型无论如何都应该是不可变的——这很重要,我会说两次;p)
    • 按值传递引用(更改为 字段/属性 的引用类型对调用方可见,但 再分配 新/不同对象的引用类型为 可见的)
    • 通过引用传递引用(对字段/属性的更改, 重新分配引用对调用方可见)
        2
  •  12
  •   Tim Goodman    14 年前

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

    基本上,如果通过值传递一个引用,那么您可以更改它引用的对象,并且这些更改将在方法外部保持,但是您不能使变量引用其他对象,并使该更改在方法外部保持。

        3
  •  7
  •   Reed Copsey    14 年前

    默认情况下,C中的参数是“ByVal”传递的。如果需要不同的行为,必须指定“ref”或“out”。

    推荐文章