C#值参数、引用参数和输出参数
一、值参数:在使用参数时,是把一个值传递给函数使用的一个变量。对函数中此变量的任何修改都不会影响函数调用中指定的参数。(由于函数只有一个返回值,不能用作参数的多个变量值)。
二、引用参数:即函数处理的变量与函数调用中使用的变量相同,而不仅仅是值相同的变量。因此,对这个变量的任何改变都会影响用作参数的变量值。需用ref关键字指定参数。用作ref参数的变量有两个限制,由于函数可能会改变引用参数的值,所有必须在函数调用中使用“非常量”变量。其次,必须使用初始化过的变量。
三、输出参数:out关键字,指定所给定的参数是一个输出参数。Out关键字的使用方式与ref关键字相同,实际上,他的执行方式与引用参数完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量。
四、引用参数和输出参数的一些重要区别:
- 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。
- 另外,在函数使用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(); }
结果如下显示: