C#值参数、引用参数和输出参数

  一、值参数:在使用参数时,是把一个值传递给函数使用的一个变量。对函数中此变量的任何修改都不会影响函数调用中指定的参数。(由于函数只有一个返回值,不能用作参数的多个变量值)。

  二、引用参数:即函数处理的变量与函数调用中使用的变量相同,而不仅仅是值相同的变量。因此,对这个变量的任何改变都会影响用作参数的变量值。需用ref关键字指定参数。用作ref参数的变量有两个限制,由于函数可能会改变引用参数的值,所有必须在函数调用中使用“非常量”变量。其次,必须使用初始化过的变量。

  三、输出参数:out关键字,指定所给定的参数是一个输出参数。Out关键字的使用方式与ref关键字相同,实际上,他的执行方式与引用参数完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量。

  四、引用参数和输出参数的一些重要区别:

  1. 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。
  2. 另外,在函数使用out参数时,必须把它看成是尚未赋值。即调用代码可以把已赋值的变量用作out参数,但存储在该变量中的值会在函数执行时丢失。

  下面通过三个方法分别对三种参数传递进行说明:

     static void AMethod(int i)//值传递
        {
            i = i + 1;
        }
        static void BMethod(ref int i)//引用传递
        {
            i = i + 1;
        }
        static void CMethod(out int i, out string j)//输出传递
        {
            i = 6;//输出参数函数必须在函数内部进行初始化赋值
            j = "return";
        }
        static void Main(string[] args)
        {
            int i = 1; string j = "C#";//输出参数赋值
            AMethod(i);//调用值传递函数
            Console.WriteLine("(1)、 i=1;经过AMethod方法(加1),值传递之后  i=" + i);
            Console.WriteLine();
            BMethod(ref i);//调用引用传递函数
            Console.WriteLine("(2)、 i=1;经过BMethod方法(加1),ref传递之后 i=" + i);
            Console.WriteLine();
            CMethod(out i, out j);//调用输出传递函数
            Console.Write("(3)、 i=1;经过CMethod方法(加1),out传递之后 ");
            Console.WriteLine("i=" + i + " j=" + j); Console.WriteLine();
            Console.ReadKey();
        }

  结果如下显示:

  

原文地址:https://www.cnblogs.com/dyf96966/p/5483411.html