在c#中使用out关键字

Abb*_*bas 3 .net c# out keyword

任何人都可以建议我确切使用out关键字作为参数,以及它如何连接从函数返回多个值,如在此POST中,我与变量与正常变量混淆.任何人都可以帮助我.

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因为它们是相同的.zx前面的例子中是两个不同的名字是指两个不同的变量.增量z不会改变x.

总结:"out"和"ref"只是表示"不要创建新变量;而是暂时为现有变量创建第二个名称".

那现在清楚了吗?

更新:我没有说"out"和"ref"之间的区别是什么.区别很简单.在"调用方"一侧,在调用方法之前,"ref"必须是明确赋值的变量."出局"不一定是.在"被调用方"一侧,可以在写入之前读取"ref",但必须在读取之前写入"out".此外,必须在控制正常离开方法之前写入"out".


Ica*_*rus 5

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)