值传递
- 使用值传递时,向形式参数传递的是实在参数的副本,方法内发生的对形式参数的更改对实在参数本身没有任何影响。
代码示例:
static void Main(string[] args)
{
int i = 0;
Console.WriteLine(FunctionA(i)); ---> 1
Console.WriteLine(i); ---> 0
Console.ReadKey();
}
static int FunctionA(int i)
{
i = 1;
return i;
}
引用传递
- 使用ref或out关键字声明通过引用传递方式传递参数,把实在参数的地址传给形式参数,形参和实参指向同一个存储单元,对形参的改变就是对实参的改变。
- ref与out的区别在于:ref要求参数在传递之前必须初始化,out不要求初始化,但要在方法中完成初始化。
代码示例:
static void Main(string[] args)
{
int i = 0;
Console.WriteLine(FunctionA(ref i)); ---> 1
Console.WriteLine(i); ---> 1
Console.ReadKey();
}
static int FunctionA(ref int i)
{
i = 1;
return i;
}
static void Main(string[] args)
{
int i;
Console.WriteLine(FunctionA(out i)); ---> 1
Console.WriteLine(i); ---> 1
Console.ReadKey();
}
static int FunctionA(out int i)
{
i = 1;
return i;
}
参数分类:值参数/引用参数(ref)/输出参数(out)