为什么我们使用输出参数,例如
void f() {
int first, next;
read(out first, out next);
}
void read (out int first, out intnext) {
first = console.read();
next = console.read();
}
而不是编写所有这些代码,为什么我们不使用:
void f() {
int first, next;
first = console.read();
next = console.read();
}
答案 0 :(得分:4)
out
参数非常类似于具有额外的返回值。
在具有void返回类型的方法中拥有out
参数并不是一个好主意,就像您给出的示例一样......但有时您希望能够一次返回多个值。即使在您的示例中,您可能想要在单个方法调用中封装“我正在从控制台读取两次”的想法。在这种情况下,这有点不太可能,因为操作很容易分离 - 但在其他情况下,执行一些工作会自然地提供两位信息,并且您不希望重复工作以获得两个位。当然,你可以将它们封装在一个新的结构或类中,但有时这只是一种痛苦。
对于.NET 4,请注意返回Tuple<...>
通常更好。因此,int.TryParse
的签名为
bool TryParse(string text, out int value)
可能会更好
Tuple<bool, int> TryParse(string text)
答案 1 :(得分:1)
out
参数有效地允许方法具有多个返回值。引用类型不需要修饰符,但对于值类型,对方法体中的参数变量所做的更改通常不会回流到调用代码。
答案 2 :(得分:1)
当您希望方法返回多个值时,声明out方法很有用。使用out参数的方法仍然可以返回值。一个方法可以有多个out参数。
out关键字导致参数通过引用传递。这类似于ref关键字,除了ref要求在传递之前初始化变量。要使用out参数,方法定义和调用方法都必须显式使用out关键字。
虽然作为out参数传递的变量不需要在传递之前初始化,但是调用方法需要在方法返回之前分配一个值。