1、通常情况下,在方法接收到了一个未被初始化的数值时,编译器将产生错误。关键词out指定了一个输出参数,该参数是被调用方法将要对其赋值的参数,即参数可以不被初始化。另外,当希望方法返回多个值时,声明out方法可以很好的解决问题。
2、ref 关键字使参数按引用传递。其效果是,当传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。传递到ref 参数的参数必须最先初始化。
 
看一个简单的例子:
static void Main(string[] args)
{
   int i;
   int j=2;
   Ret(out i, out j);//必须添加out关键字
   Cheng(ref j);//必须添加ref关键字
   Console.WriteLine(i);//结果为3
   Console.WriteLine(j);//结果为6
}

//使用out关键字引用传递,使用这种方法可以实现函数返回多个值的问题
static void Ret(out int i,out int j)
{
   i = 3;
   j = 3;//必须对out参数赋值
}

//使用ref关键字引用传递
static void Cheng(ref int i)
{
   i *= 2;
}