C#--ref和out参数

发布时间 2023-04-29 16:06:20作者: 包子789654

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