C# 中 ref 和 out 的区别

在 C# 中我们可以使用 ref 或者 out ,从函数内部传递数据出来,如下:

static void FuncRef(int x, ref int y)
{
    y = 24;
}

static void FuncOut(int x, out int y)
{
    y = 24;
}

不同之处在于,ref 要求 y 要在调用 FuncRef 之前就初始化好,而 out 要求 y 必须在 FuncOut 内部进行初始化,编译器会进行编译检查。注意 int z; 这句话只是声明,并没有初始化这个变量。

最后,我们需要说明的是在 CIL 层面 ref 和 out 两个函数的指令完全相同,只是在函数列表里面多了一个 [out] ,如下: