【发布时间】:2014-11-10 13:48:58
【问题描述】:
为什么必须在 out 参数离开当前方法之前对其进行赋值? 有人可以详细说明一下外壳内部发生了什么吗?提前致谢。
【问题讨论】:
-
Out 表示参考参数。有时方法必须返回多个值并且不存储类状态。 Out 满足了这些要求。有了它,我们传递参数,这些参数的变化在它们的调用方法中实现
为什么必须在 out 参数离开当前方法之前对其进行赋值? 有人可以详细说明一下外壳内部发生了什么吗?提前致谢。
【问题讨论】:
为什么必须在 out 参数离开当前方法之前对其进行赋值?
将out 参数视为额外的返回值。就像你不能在不指定返回值的情况下从非 void 方法返回一样,你不能在不为参数设置值的情况下从带有 out 参数的方法返回。
这反过来允许out参数的参数在方法完成后被确定地分配,因为它肯定会被方法赋予一个值:
int value;
Foo(out value);
Console.WriteLine(value); // This is fine
【讨论】:
因为是这样设计的。这就是out和ref参数的区别。通过将参数声明为out,该方法保证它会设置参数的值。通过@987654324 @,没必要。如果你不想要out,请使用ref。
【讨论】:
out,该方法还保证在它写入参数值之前,它永远不会读取参数的值至少一次。另一方面,对于ref,调用者必须确保变量已明确分配。所以我想我们可以说ref 对调用者施加了一些限制,而out 限制了实现。