C# out、ref、params参数

  1、out参数实例数组

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

  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;
        }
    }

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

总结:string

若是一个方法中,返回多个相同类型的值时候,咱们能够考虑返回一个数组。可是返回多个不一样类型的值时候,返回数组就不行,那么这个时候,咱们能够考虑用out参数。it

out参数就侧重于一个方法能够返回多个不一样类型的值。class

 

2、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;
        }
    }

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

总结:im

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

 ref参数要求在方法外必需要赋值,而方法内能够不赋值。

 

3、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关键字。

 

4、out 与ref的区别

区别:

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

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

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

如图所示:

out参数

ref参数

ref关键字是须要先初始化传入的参数,才可以使用。

相关文章
相关标签/搜索