一、值参数
1、在栈中为形参分配空间
2、复制实参到形参
public class Person
{
public int age = 10;
}
static void Main(string[] args)
{
int a2= 10;
Person a1= new Person();
Console.WriteLine(a1.age + "--" + a2);
SetParam(a1, a2);
Console.WriteLine(a1.age + "--" + a2);
Console.ReadLine();
}
static void SetParam(Person f1, int f2)
{
f1.age = f1.age + 5;
f2 = f2 + 5;
}
上面的输出结果是.
10--10
15--10
二、引用参数
1、使用引用参数时,必须在方法的声明和调用中都使用ref修饰符。
2、实参必须是变量,在用作实参前必须被赋值,如果是引用类型的变量,可以赋值为一个引用或null值。
3、不在栈中为形参分配新的内存。
4、形参名称相当于实参变量的别名,引用与实参相同的内存位置。
public class Person
{
public int age = 10;
}
static void Main(string[] args)
{
int a2 = 5;
Person a1 = new Person();
Console.WriteLine(a1.age + "--" + a2);
SetParam(ref a1,ref a2);
Console.WriteLine(a1.age + "--" + a2);
Console.ReadLine();
}
static void SetParam(ref Person f1,ref int f2)
{
f1.age = f1.age + 5;
f2 = f2 + 5;
}
上面的输出结果是
10--5
15--10
三、输出参数
1、必须在声明的调用中都是用修饰符。输出参数的修饰符是out而不是ref。
2、实参不许是变量,不能是其他表达式类型。
3、在方法内部,输出参数在被读取之前必须被赋值。这意味着参数的初始值是无关的,而且没有必要在方法调用前为实参赋值。
4、每个输出参数在方法返回之前必须被赋值
public class Person
{
public int age = 10;
}
static void Main(string[] args)
{
Person a1 = null;
int a2;
OutParam(out a1,out a2);
Console.WriteLine(a1.age + "--" + a2);
Console.ReadLine();
}
static void OutParam(out Person f1, out int f2)
{
f1 = new Person();
f1.age = 25;
f2 = 15;
}
上面的输出结果是
25--15