在 C# 中使用 REF 和 OUT 关键字进行按引用传递与按值传递

2023-11-21

到目前为止我的理解如下:

价值传递

按值传递意味着传递参数的副本。 对该副本的更改不会更改原始版本。

通过参考

通过引用传递意味着传递对原始内容的引用。 对引用的更改会影响原始引用。

参考关键字

REF 告诉编译器该对象在进入函数之前已初始化。 REF 表示该值已经设置,因此该方法可以读取它并修改它。 REF 有两种方式,即输入和输出。

输出关键字

OUT 告诉编译器该对象将在函数内初始化。 OUT 表示该值尚未设置,因此必须在调用 return 之前设置。 OUT只是一种方式,那就是out。

Question

那么在什么情况下您会结合使用 ref 和 out 关键字,通过引用传递或通过值传递? 例子会有很大帮助。

非常感谢帮助。


你会never结合ref and out在 1 个参数上。它们的意思都是“通过引用传递”。

当然,您可以在一种方法中组合 ref 参数和 out 参数。

和...之间的不同ref and out主要在于intent。 ref 表示 2 路数据传输,out 表示 1 路。

但除了意图之外,C# 编译器还跟踪明确赋值,这也是最明显的区别。它还可以防止误用(读取)输出参数。

void SetOne(out int x) 
{
  int y = x + 1; // error, 'x' not definitely assigned.
  x = 1;         // mandatory to assign something
}

void AddTwo(ref int x)
{
    x = x + 2;  // OK, x  is known to be assigned
}

void Main()
{
    int foo, bar;

    SetOne(out foo); // OK, foo does not have to be assigned
    AddTwo(ref foo); // OK, foo assigned by SetOne
    AddTwo(ref bar); // error, bar is unassigned
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中使用 REF 和 OUT 关键字进行按引用传递与按值传递 的相关文章

随机推荐