为什么我们需要“out”参数?

时间:2010-11-29 11:01:06

标签: c#

我理解“out”就像“ref”类型,除了out变量不必初始化。 “out”参数还有其他用途吗?有时候我会在回调方法中看到它们的使用,但我从来不知道它们是如何工作的,或者为什么我们需要它们而不是全局级ref变量?

4 个答案:

答案 0 :(得分:14)

out参数通过显式指定被调用者将初始化它们来强制调用者和被调用者(被调用的函数)之间的契约。另一方面,当使用ref参数时,我们所知道的是被调用者可以修改它们,但是调用者有责任初始化它们。

答案 1 :(得分:3)

最大的一个例子是TryParse方法,您希望能够检查是否可以转换某些内容,并且通常如果可以转换它,则需要转换后的值。否则它只是另一种将对象传递回调用方法的方法。

答案 2 :(得分:3)

为什么你要在调用方法中初始化一些东西,并不保证如果方法正常完成,被调用的方法本身会覆盖变量?这些是out参数给您带来的好处。

基本上我认为out参数为“oops,我需要返回多个值”指标。我更喜欢自己使用元组,但当然它们只是将它变成了.NET 4 ...而且如果没有明确的语言支持,它们使用起来也会比理想情况稍微尴尬。

答案 3 :(得分:0)

有两个主要差异

  1. 与ref不同,它不期望变量被初始化。
  2. 使用OUT时,被调用的函数负责分配值而不是被调用者。