小编典典

何时使用 in vs ref vs out

all

前几天有人问我什么时候应该使用 parameter 关键字out而不是ref.
ref虽然我(我认为)理解andout关键字(之前已经问过)之间的区别并且最好的解释似乎是ref==
inand out,但我应该始终使用哪些(假设或代码)示例out而不是ref.

既然ref更通用,你为什么要使用out?它只是语法糖吗?


阅读 90

收藏
2022-03-22

共1个答案

小编典典

out除非你需要,否则你应该使用ref.

当需要将数据编组到另一个进程时,这会产生很大的不同,这可能会很昂贵。因此,当方法不使用初始值时,您要避免编组初始值。

除此之外,它还向声明或调用的读者显示初始值是相关的(并且可能保留)还是被丢弃。

作为一个小区别,out 参数不需要初始化。

示例out

string a, b;
person.GetBothNames(out a, out b);

其中 GetBothNames 是一种以原子方式检索两个值的方法,无论 a 和 b
是什么,该方法都不会改变行为。如果调用到夏威夷的服务器,将初始值从这里复制到夏威夷是浪费带宽。使用 ref 的类似片段:

string a = String.Empty, b = String.Empty;
person.GetBothNames(ref a, ref b);

可能会使读者感到困惑,因为看起来 a 和 b 的初始值是相关的(尽管方法名称会表明它们不相关)。

示例ref

string name = textbox.Text;
bool didModify = validator.SuggestValidName(ref name);

这里的初始值与方法有关。

2022-03-22