ref 关键字通过引用传递的参数的内存地址,而不是值。简单点说就是在方法中对参数的任何改变都会改变调用方的基础参数中。代码举例:
class RefExample { static void Method(ref int i) { i = i + 44; } static void Main() { int val = 1; Method(ref val); Console.WriteLine(val); //Output: 45 } }
同样,out关键字也是通过地址传递,方法中对参数的任何改变都会改变调用方的基础参数值,代码举例:
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
从上述的两段代码中,可以看出,Ref 的参数必须先初始化,而out 的参数不用,若要使用out ,方法定义和调用方法都必须使用out关键字;
尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
一句话总结就是:ref有进有出,out只出不进。