任何人都可以建议我将 out 关键字作为参数的确切用法,以及它如何连接以从函数返回多个值,如 POST 中所示,我对 out 变量和普通变量感到困惑。谁能帮我解决这个问题。
最佳答案
这经常令人困惑,而且我认为 MSDN 文档实际上有点“只有已知才能清楚”。也就是说,它是正确的,但只有您已经理解了这个概念,它才真正有意义。
这是我的想法。
常规参数对参数 的值 进行复制。当你说:
static int M(int z) { z = z + 1; return z; }
...
int x = 123;
int y = M(x);
正如你所说:
int x = 123;
int z = x; // make a copy of x
z = z + 1;
int y = z;
一个 ref 或 out 参数为现有变量创建别名。当你说
static void N(ref int q) { q = q + 1; }
...
int x = 123;
N(x);
这等同于说:
int x = 123;
// MAGIC: q is now an another name for variable x
q = q + 1;
q
和 x
是两个不同的名称,它们指的是相同的变量。递增 q
也会递增 x
,因为它们是相同的。上例中的 z
和 x
是两个不同的名称,分别引用两个不同的变量。增加 z
不会改变 x
。
总结:“out”和“ref”只是表示“不要创建新变量;而是暂时为现有变量创建第二个名称”。
现在清楚了吗?
更新:我没有说明“out”和“ref”之间的区别。区别很简单。在“调用者”方面,“ref”必须是在方法被调用之前明确分配的变量。不需要“出局”。在“callee”端,“ref”可以在写入之前被读取,但“out”必须在读取之前被写入。此外,在控件正常离开该方法之前,必须写入“out”。
关于c# - 在 C# 中使用 out 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716641/