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只出不进。

浙公网安备 33010602011771号