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