C# 方法的out、ref、params参数

  一、out参数实例

【实例】求一个数组中的最大值、最小值、总和、平均值

  class Program
    {
        static void Main(string[] args)
        {
            //写一个方法 求一个数组中的最大值、最小值、总和、平均值
            int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
            int max;
            int sum;
            int min;
            int avg;
            bool b;
            string s;
            double d;
            GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
            Console.WriteLine("数组中的最大值:{0},最小值:{1},总和:{2},平均值:{3}",max ,min,sum,avg);
            Console.WriteLine("输出out参数的方法不同类型的值:{0},{1},{2}",b,s,d);
            Console.ReadKey();
        }
        /// <summary>
        /// 求一个整数的数组的最大值,最小值,总和,平均值
        /// </summary>
        /// <param name="nums">要求值的数组</param>
        /// <param name="max">返回的最大值</param>
        /// <param name="min">返回的最小值</param>
        /// <param name="sum">返回的总和</param>
        /// <param name="avg">返回的平均值</param>
        public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
        {
           //out参数要求在方法的内部必须为其赋值
            max = nums[0];
            min = nums[0];
            sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i]>max)
                {
                    max = nums[i];
                }
                if (nums[i]<min)
                {
                    min = nums[i];
                }
                sum += nums[i];
            } 
            avg = sum / nums.Length;

            b = true;
            s = "123";
            d = 3.13;
        }
    }

执行代码输出结果,如图所示:

总结:

如果一个方法中,返回多个相同类型的值时候,我们可以考虑返回一个数组。但是返回多个不同类型的值时候,返回数组就不行,那么这个时候,我们可以考虑用out参数。

out参数就侧重于一个方法可以返回多个不同类型的值。

二、ref参数的实例

【实例】使用方法来交换两个int类型的变量

 class Program
    {
        static void Main(string[] args)
        {
            //使用方法来交换两个int类型的变量
            int n1 = 10;
            int n2 = 20;
            Test(ref n1, ref n2);
            Console.WriteLine("两个值互相交换后n1为{0},n2为:{1}",n1,n2);
            Console.ReadKey();
        }
        public static void  Test(ref int n1,ref int n2)
        {
            int temp = n1;
            n1 = n2;
            n2 = temp;
        }
    }

执行代码输出结果,如图所示:

总结:

ref参数能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法。

 ref参数要求在方法外必须要赋值,而方法内可以不赋值。

三、params可变参数

【实例】求任意长度数组的和 整数类型的

 class Program
    {
        static void Main(string[] args)
        {
            //求任意长度数组的和 整数类型的
            int[] nums = { 1, 2, 3, 4, 5, 6 };
            int sum = GetSum(8,9);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        public static int GetSum(params int[] nums)
        {
            int sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
            }
            return sum;
        }
    } 

执行代码输出结果,如图所示:

如图所示:

 总结:

将实参数列表中跟可变参数数组类型一致的元素都当做数组的元素去处理

params可变参数必须是形参列表中的最后一个元素,并且在方法声明中只允许一个params关键字。

四、out 与ref的区别

区别:

1.使用ref参数时,传入的参数必须被初始化,对out而言,必须在方法中对其完成初始化。

2.使用ref参数和out参数时,在方法的参数和执行方法时,都要加ref或者out关键字。

3.out参数适合用在需要return多个返回值的地方,而ref参数则用在需要被调用的方法修改调用者的引用的时候。

如图所示:

out参数

ref参数

ref关键字是需要先初始化传入的参数,才能够使用。

原文地址:https://www.cnblogs.com/qy1234/p/11826649.html