C# 方法参数params ref out 的理解和区分

来源:互联网 发布:淘宝不能合并付款了 编辑:程序博客网 时间:2024/06/05 07:46

1.params    MSDN解释 关键字可以指定在参数数目可变处采用参数的参数方法

通俗理解:譬如,定义一个数组时,不知数组长度时,便可用params关键字修饰。

在方法声明中的params关键字之后不允许任何其他参数,并且在方法生命中只允许一个params关键字。

2.ref    MSDN解释:ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

其实在C#中,一般情况下,我们在给方法传参数时,实际上是使用的是参数的一个副本,就是将原来的变量赋值一份,然后传给方法来进行操作,所以在方法内部对参数的操作并不会对原本变量造成影响。但有时候,我们需要产生这种影响,就要使用到ref。此时传给方法的参数不是变量的副本而是变量本身。

3.out    MSDN解释:out 关键字会导致参数通过引用来传递。这与 ref关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

out与ref类似。不同之处在于out不需要对变量进行初始化。

ref与out的使用时在定义和调用方法时都必须使用。

using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{    class Program    {        //params        private static void useParams(params object[] array)        {            for (int i = 0; i < array.Length; i++)            {                Console.WriteLine(array[i]);            }        }        //ref        private static void refChange1(int num)        {            num = 1;        }        private static void refChange2(ref int num)        {            num = 1;        }        //out        private static void outChange(out string num)        {            num = "miner";        }        static void Main(string[] args)        {            //params            useParams(1, 2, 3);            useParams("miner", "me");            //ref            int num1 = 0;            refChange1(num1);            Console.WriteLine(num1);//未使用ref的结果            refChange2(ref num1);            Console.WriteLine(num1);//使用ref的结果            //out            string num2;            outChange(out num2);            Console.WriteLine(num2);            Console.ReadLine();        }    }}


原创粉丝点击