1.值参数:
当值参数向方法传递参数时,程序会给实参的值做一份拷贝,并且将此拷贝传递给该方法,这样被调用的方法不会修改实参的值,所以使用值参数时,可以保证实参的值是安全的。但是如果参数类型是引用类型,如类的引用变量,则拷贝中存储的也是对象的引用,所以拷贝和实参引用同一个对象。通过这个拷贝,可以修改实参所引用的对象中的数据成员。
2.引用参数:
如果需要修改或得到方法外部的变量值,就需要用到引用参数。C#语言用引用参数向方法传递实参,程序将把实参的引用,即实参在内存中的地址传递给方法,方法通过实参的引用,修改或得到方法外部的变量值。引用参数必须要用ref修饰符声明。
注意:实参变量要求必须被设置了初始值。
using System;
class Cl{
public int a=0;
}
class C2{
public static void F1(ref char i){ //引用参数
i='b';
}
public static void F2(char i){ //值参数,参数类型为值类型
i='d';
}
static void Main(string[] args){
char str='c';
F2(str); //值参数,不能修改外部的str;
F1(ref str); //引用参数,可以修改外部的str;
}
}
3.输出参数:
为了把方法的运算结果保存到外部变量,因此需要知道外部变量的引用(地址)。输出参数用于向方法传递外部变量引用(地址),所以输出参数也是引用参数,与引用参数不同的是调用方法前不必对实参进行初始化。
using System;
class Cl{
public int a=0;
}
class C2{
public static void F1(out char i){ //输出参数
i='b';
}
public static void F2(char i){ //值参数,参数类型为值类型
i='d';
}
static void Main(string[] args){
char str='c';
char x; //可以不初始化
F2(str); //值参数,不能修改外部的str;
F1(out x); //输出参数,可以修改外部的x;
}
}
4.数组参数:
数组参数用params说明。
注意:(1)如果形参表中包含了数组参数,那么它必须是参数表中最后一个参数,数组参数只允许是一维数组。
(2)数组参数不能再有ref和out修饰符。
using System;
class Class1{
static void P(ref int sum,params int[] arr){
int i;
for (i = 0; i <= arr.Length - 1;i++ )
{
sum = sum + arr[i];
arr[i] = arr[i] * arr[i];
}
}
static void Main(string[] args)
{
int[] a = { 1, 2, 3 };
int i;
int s = 0;
P(ref s,a);
Console.WriteLine("和为:{0}",s);
for (i = 0; i < a.Length;i++ )
{
Console.WriteLine("a[{0}]={1}",i,a[i]);
}
P(ref s, 23, 45);
Console.WriteLine("和为:{0}",s);
Console.ReadKey();
}
}
注意:方法的参数为数组时也可以不使用params,此种方法就可以使用一维和多维数组。