65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中的 Out 和 REF

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (23投票s)

2015年9月28日

CPOL

3分钟阅读

viewsIcon

29436

本博客详细解释了 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 标记变量时,只会传递引用,而不会传递数据给函数。例如,在下面的代码中,来自“OutSideVar”的值“20”不会发送到该函数。但是,从内部函数对变量所做的任何修改都会反映到外部变量。
 

总结一下,你也可以将它称为单向,但它是从被调用者到调用者的单向,并且从调用者发送的任何数据都会被丢弃。
 

所以总结一下我们所学到的:-
  • Out 和 Ref 帮助通过引用传递变量。
  • 在 REF 中,通过引用,数据也从调用者传递到被调用者,反之亦然。它是双向的,即从调用者到被调用者,反之亦然。
  • 在 OUT 中,只传递引用,并且来自被调用者的修改后的数据会传递给调用者的变量。这是从被调用者到调用者的单向。
  • 在 OUT 中,如果数据是从调用者函数传递的,则会被丢弃,并且该变量必须在函数内部初始化。
下图总结了我们在以上文章中讨论的内容。
 


下面是一个不错的 C# youtube 视频,它实际解释了 Out Vs Ref。

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

© . All rights reserved.