一尘不染

何时使用in vs ref vs out

c#

前几天有人问我应该使用parameter关键字out而不是ref。尽管我(我认为)了解了refout关键字(之前已经问过)之间的区别,并且最好的解释似乎是ref==
inout,但是我应该始终使用out而不是一些(假设的或代码的)示例ref

由于ref更笼统,您为什么要使用out?只是语法糖吗?


阅读 327

收藏
2020-05-19

共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);

此处的初始值与方法有关。

2020-05-19