Eri*_*ert 11
这经常令人困惑,我认为MSDN文档实际上有点"只有在已经知道的情况下才会清楚".也就是说,它是正确的,但只有你已经理解了这个概念才真正有意义.
这是我如何看待它.
有规律的参数使得副本中的值的的参数.当你说:
static int M(int z) { z = z + 1; return z; }
...
int x = 123;
int y = M(x);
Run Code Online (Sandbox Code Playgroud)
就像你说的那样:
int x = 123;
int z = x; // make a copy of x
z = z + 1;
int y = z;
Run Code Online (Sandbox Code Playgroud)
ref或out参数为现有变量创建别名.当你说
static void N(ref int q) { q = q + 1; }
...
int x = 123;
N(x);
Run Code Online (Sandbox Code Playgroud)
这跟说:
int x = 123;
// MAGIC: q is now an another name for variable x
q = q + 1;
Run Code Online (Sandbox Code Playgroud)
q并且x是两个不同的名称,它们指的是同一个变量.增量q也会增加,x因为它们是相同的.z和x前面的例子中是两个不同的名字是指两个不同的变量.增量z不会改变x.
总结:"out"和"ref"只是表示"不要创建新变量;而是暂时为现有变量创建第二个名称".
那现在清楚了吗?
更新:我没有说"out"和"ref"之间的区别是什么.区别很简单.在"调用方"一侧,在调用方法之前,"ref"必须是明确赋值的变量."出局"不一定是.在"被调用方"一侧,可以在写入之前读取"ref",但必须在读取之前写入"out".此外,必须在控制正常离开方法之前写入"out".
MSDN 文档已经很好地解释了这一点:
out 关键字导致参数通过引用传递。这与 ref 关键字类似,只不过 ref 要求变量在传递之前进行初始化。要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。例如:
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |