一.值参数:

使用值参数,就是把实参的值复制到形参中。通过这种方式把数据传递到方法。方法被调用时,系统做如下工作:

1.在栈中为形参分配空间

2.复制实参到形参。

一个值参数的实参不一定是变量,也可以是任何能计算成相应数据类型的表达式。

小结:如果参数是值类型,它的值不受方法的影响。如果是引用类型,它的值会被方法的行为改变。

二.引用参数:

使用引用参数时,必须在方法的声明和调用中同时使用ref关键字。而且实参必须是变量,不能为表达式。如果是引用类型变量,在用作实参前必须被赋值,可以赋值为一个引用或Null值。

小结:这时的形参的参数名看起来就好像是实参变量的别名,也就是蠊,它们指向的是相同的内在位置。所以此时种情况,无论值类型还是引用类型的参数,其都会受到方法行为的影响。

 

三.输出参数

其和引用参数相类似,必须在声明和调用中都使用关键字out而不是ref。其实参必须是变量。但是,在方法内部的,输出参数在被读取之前必须被赋值。这意味着参数的初始值是无关的,而且没有必要在方法调用之前为实参赋值。在方法返回之前,方法内部的任何贯穿的可能路径都必须为所有的输出参数进行一次赋值。

小结:和引用参数类似,这时的形参的参数名看起来就好像是实参变量的别名。

四.参数数组

参数数组同上面的参数不一样,它允许零个或多个实参对应一个特殊的形参。其重点如下:

1.在一个参数列表中只能有一个参数数组。

2.如果有,它必须是列表中的最后一项。

3.在数据类型前使用params修饰符。

4。在数据类型后放置一组空的方括号。

注:数据是一组整齐的相同类型的数据项,其使用一个数字索引进行访问。数组是一个引用类型,因此它的所有数据项都保存在堆中。

小结:其它参数要么使用修饰符,要么不使用修饰符。

1.值参数的声明和调用都不使用修饰符。

2.引用参数和输出参数在两个地方都使用了修饰符。

但是要注意的是:params修饰符只在声明中有,在调用不允许有。

关于参数数组还有一个重要的点要牢记:当数组在堆中被创建时,实参的值被复制到数组中,在这方面,它们就像值参数:

1.如果数组参数是值类型,那么值被复制,实参不受方法内部的影响

2.如果数组参数是引用类型,那么引用被复制,实参引用的对象可以受到方法内部的影响。