Out 和 Ref 参数

值类型(结构和枚举)通过值传递给函数:将为函数提供副本,而不是对变量的引用。所以以下功能不会做任何事情。

void add_three (int x) {
    x += 3;
}

int a = 39;
add_three (a);
assert (a == 39); // a is still 39

要更改此行为,你可以使用 ref 关键字。

// Add it to the function declaration
void add_three (ref int x) {
    x += 3;
}

int a = 39;
add_three (ref a); // And when you call it
assert (a == 42); // It works!

out 以相同的方式工作,但你必须在函数结束之前为此变量设置一个值。

string content;
FileUtils.get_contents ("file.txt", out content);

// OK even if content was not initialized, because
// we are sure that it got a value in the function above.
print (content);