一、值参数
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
