两者都是按地址传递的,使用后都将改变原来参数的数值。
class Program { static void Main(string[] args) { int num = 1; Method(ref num); Console.WriteLine(num); Console.ReadKey(); } public static void Method(ref int num) { num += 5; } }
class Program { static void Main(string[] args) { int num = 1; Method(out num); Console.WriteLine(num); Console.ReadKey(); } public static void Method(out int num) { num = 5; num++; } }
一:关于调用前初始值
ref作为参数的函数在调用前,实参必须赋初始值。否则编译器将提示:使用了未赋值的局部变量; out作为参数的函数在调用前,实参可以不赋初始值。
二:关于调用
在被调用函数内,out引入的参数在返回前至少赋值一次,否则编译器将提示:使用了未赋值的out参数; 在被调用函数内,ref引入的参数在返回前不必为其赋初值。