C# 中的 Out 和 REF






4.87/5 (23投票s)
本博客详细解释了 C# 中的 Out 和 REF 参数。
Out 和 REF 是 C# 中最容易混淆的主题之一。在这篇小文章中,我们将尝试简化它。
关于 OUT 和 REF,有三个要点需要记住,一旦你理解了这三个要点,你就永远不会再遇到 OUT 和 REF 的问题。
要点 1:- 默认情况下,变量是通过 BYVAL(按值传递)传递给方法和函数的。 Out 和 Ref 帮助通过 BY REF(按引用传递)传递变量。
让我们试着理解以上几点。考虑下面的代码片段,其中我们有“Main”方法,它调用“SomeFunction”方法并将“OutSideVar”变量传递给“SomeFunction”。
现在默认情况下,只有“OutSideVar”的值会被复制到该方法,因此“InsideVar”变量中的任何更改都不会影响到外部。你可以看到,在函数调用之后,“OutSideVar”仍然有值“20”。换句话说,默认情况下,这些值是按值传递的 (BY VAL)。
因此,如果我们总结一下,在正常情况下,数据是从调用者传递到被调用者的,方式是 BY VAL(按值传递)。被调用者中所做的任何修改都不会反映给调用者。
要点 2:- 当我们用 REF 标记参数时,变量的引用会被传递给函数/方法,并且该方法和函数中的任何修改都会影响到外部变量。
在下面的代码中,你可以看到我们使用了 REF 关键字标记了变量,你可以看到函数内部的更改是如何修改外部变量的。 发生这种情况是因为现在变量是按引用传递的。
总结一下,在这种情况下,数据 + 引用会被传递给函数,并且函数内部的任何修改都会影响到外部变量。
要点 3:- 当我们用 OUT 标记参数时,只有变量的引用被传递给函数或方法,而不是数据。该方法和函数中的任何修改也会影响到外部变量。 并且强制要求初始化变量。
总结一下,你也可以将它称为单向,但它是从被调用者到调用者的单向,并且从调用者发送的任何数据都会被丢弃。
所以总结一下我们所学到的:-
- Out 和 Ref 帮助通过引用传递变量。
- 在 REF 中,通过引用,数据也从调用者传递到被调用者,反之亦然。它是双向的,即从调用者到被调用者,反之亦然。
- 在 OUT 中,只传递引用,并且来自被调用者的修改后的数据会传递给调用者的变量。这是从被调用者到调用者的单向。
- 在 OUT 中,如果数据是从调用者函数传递的,则会被丢弃,并且该变量必须在函数内部初始化。
下面是一个不错的 C# youtube 视频,它实际解释了 Out Vs Ref。

进一步阅读,请观看下面的面试准备视频和分步视频系列。