C#--ref和out参数
1,普通参数
1.1,带普通参数的方法
static void fun(int a)//普通的函数参数是将a的值传入的,单独创建一个临时空间存a的值,函数结束了a的临时内存空间就不存在了 { a = a + 3; Console.WriteLine($"普通参数,a的值为{a}"); }
1.2,调用方法
int a; a = 5; Console.WriteLine($"普通参数,执行前,a的值为{a}");//5 fun(a);//8 Console.WriteLine($"普通参数,执行后,a的值为{a}");//5 Console.WriteLine("-------------------------------");
1.3,输出结果
普通参数,执行前,a的值为5 普通参数,a的值为8 普通参数,执行后,a的值为5
2,ref参数
2.1,带ref参数的方法
static void fun2(ref int a)//加了ref的参数,是将a的内存地址传入 { a = a + 3; Console.WriteLine($"ref参数,a的值为{a}"); }
2.2,调用方法
int a2; a2 = 5;//【注意1,使用ref 必须在 调用方法前 对其进行初识化操作,如果没有初始化就报错】 Console.WriteLine($"ref参数,执行前,a2的值为{a2}");//5 fun2(ref a2);//8 Console.WriteLine($"ref参数,执行前,a2的值为{a2}");//8
2.3,输出结果
ref参数,执行前,a2的值为5 ref参数,a的值为8 ref参数,执行前,a2的值为8
3,out参数
3.1,带out参数的方法
static void fun3(int a, int b, out int max, out int min) { //if (max > min)//没有初始化,直接报错 //{ //} if (a >= b) { max = a;//【注意2,out 的使用必须要在 方法内 进行 初始化 】 min = b; } else { max = b; min = a; } }
3.2,调用方法
int a3, b3; a3 = 100; Console.WriteLine($"out参数,执行前,a3的值为{a3}"); //Console.WriteLine($"out参数,执行前,b3的值为{b3}");//没有初始化,直接报错 fun3(2, 3, out a3, out b3); Console.WriteLine($"out参数,执行后,a3的值为{a3}"); Console.WriteLine($"out参数,执行后,b3的值为{b3}");
3.3,输出结果
out参数,执行前,a3的值为100 out参数,执行后,a3的值为3 out参数,执行后,b3的值为2
4,总结
1、ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
2、out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
3, 总结:ref有进有出,out只出不进。