gpt4 book ai didi

c# - 在 C# 中将 REF 和 OUT 关键字用于按引用传递与按值传递

转载 作者:太空狗 更新时间:2023-10-29 18:03:14 24 4
gpt4 key购买 nike

这是我目前的理解:

按值传递

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

引用传递

按引用传递意味着传递对原始文件的引用。对引用的更改会影响原始内容。

REF 关键词

REF 告诉编译器该对象在进入函数之前已初始化。REF 意味着该值已经设置,因此该方法可以读取它并修改它。REF 是两种方式,in 和 out。

OUT 关键字

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

问题

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

非常感谢帮助。

最佳答案

永远不会refout 组合到一个参数上。它们都表示“通过引用传递”。

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

refout的区别主要在于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
}

关于c# - 在 C# 中将 REF 和 OUT 关键字用于按引用传递与按值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com