ByRef 和 Output 方法参数修饰符有什么区别?

What is the difference between ByRef and Output method argument modifiers?

一切都在主题中,真的。

我看不出 x:

的这两种方法在行为上有什么区别
// first version
Method m(ByRef x As whatever)
{
    // play with x
}

// second version
Method m(Output x As whatever)
{
    // play with x
}

这两个修饰符的存在一定有某种原因,但是我的 "mastery" (uhm) 语言不足以理解其中的区别。到目前为止,我已经尝试阅读文档、搜索文档等,但无济于事。

那么,这两个参数修饰符有什么区别?

好吧,这些只是 "prettifiers",它们在实际语言行为方面并没有做太多,仅用于提供文档。想法是记录为 ByRef 的参数提供输入和输出,例如您可以传递一个数组进行排序,而输出参数仅提供输出,例如错误列表。输出修饰符是后来引入的,很多系统代码仍然对这两种用例都使用ByRef。

参数是否实际通过引用传递仅由方法调用者决定,关键字并不重要。您将调用您的方法 ..m(.parameter) 通过引用传递变量, ..m(parameter) 通过值传递变量。