值参数
修饰符
值参数是没有任何修饰符声明的参数。
功能
当使用值类型的参数调用方法时,编译程序将实参的值作为一副本,并将副本的值传递给该方法的形参,这样就可以保证对形参所作的任何操作都不会影响实参。值参数相当于局部变量,在方法被调用时,由系统会为其分配内存空间,方法调用结束后,存储空间被回收。
应用举例
class Program
{
public static void Fun(int a)
{
a += 5;
Console.WriteLine("a={0}",a);
}
static void Main(string[] args)
{
int b = 10;
Fun(b);
Console.WriteLine("b={0}", b);
Console.ReadLine();
}
}
引用参数
修饰符
声明方法时,在形参列表中使用 ref 修饰符声明的形参是引用参数。
功能
引用参数不创建新的存储位置,在参数传递的过程中,编译程序将原实参的地址传递给引用参数,是得实参和引用参数都指向相同的地址。在程序中对引用参数的修改就是对相应的实参的修改,
应用举例
class Program
{
public static void Fun(ref int a)
{
a += 5;
Console.WriteLine("a={0}",a);
}
static void Main(string[] args)
{
int b = 10;
Fun(ref b);
Console.WriteLine("b={0}", b);
Console.ReadLine();
}
}
输出参数
修饰符
声明方法时,在形参列表中使用 out 修饰符声明的形参是输出参数。
功能
输出参数适用于有多个计算结果的方法。输出参数与应用参数类似的地方是都不为形参创建新的存储位置,在方法中对输出参数的任何操作都会影响实参。两者不同的是调用带有输出参数的方法之前,不需要对传递给形参的实参进行初始化,方法调用完成后,实参变量会被方法中的形参赋值。
应用举例
class Program
{
public static void calc(int x,int y,out int cAdd,out int cSub)
{
cAdd = x + y;
cSub = x - y;
}
static void Main(string[] args)
{
int n1 = 10, n2 = 5;
int add, sub;
calc(n1,n2,out add,out sub);
Console.WriteLine("n1={0},n2={1}",n1,n2);
Console.WriteLine("add={0}",add);
Console.WriteLine("sub={0}",sub);
Console.ReadLine();
}
}
数组参数
修饰符
声明方法时,在形参列表中使用 params 修饰符声明的形参时数组参数。
功能
如果一个形参列表中包含数组参数,那么它必须位于参数列表的最后面,而且是一维数组类型。并且不可能将 params 修饰符与 ref 和 out 修饰符组合使用。数组参数适用于方法的参数个数不确定的情况,这样可以在调用方法过程中传递实参个数。
应用举例
class Program
{
public static void MutiParams(params int[] var)
{
for (int i = 0; i < var.Length; i++)
{
Console.WriteLine("var[{0}]={1}",i,var[i]);
}
Console.WriteLine("---------------------");
}
static void Main(string[] args)
{
int[] arr = { 10, 20, 30 };
MutiParams(arr);
MutiParams(100, 200);
Console.ReadLine();
}
}