目录
一、参数的声明
(1)可选参数
(2)命名参数
(3)可变参数
二、参数的传递
(1)值传递
(2)引用传递
(3)输出传递
三、ref out in
1.1可选参数
定义方法时,可以为可选参数指定一个默认值。需要注意的是,可选参数必须在需要的参数之后定义。
pulic int Sum(int a,int b,int c=1)
{
return a+b+c;
}
static void Main(string[] args)
{
Console.WriteLine(Sum(2,3));
}
output:6
1.2.命名参数
命名参数的作用就是使你无需记住参数的具体顺序
public int Sum(int a,int b)
{
return a*b;
}
static void Main(string[] args)
{
Console.Writeline(Sum(a:1,b:8));
}
1.3.可变参数
params
可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。 还可以不发送参数。 如果未发送任何参数,则
params
列表的长度为零。在方法声明中的
params
关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个 params
关键字声明的
params
参数类型必须是一维数组将参数传递给方法有三种途径:按值传递、按引用传递、按输出传递
2.1值传递
按值传递是通过形式参数将值传递到方法中,在方法中,我们可以对传递的值进行修改而不会影响原先变量的值
static void Sqr(int x)
{
x = x * x;
}
static void Main()
{
int a = 3;
Sqr(a);
Console.WriteLine(a); // 输出后可以发现,a的值仍为3
}
2.2引用传递
按引用传递参数的时候,实际是把内存地址传递到方法中,在方法内部,对参数进行操作,会直接访问内存地址中的变量,这也意味着,在方法中对形式参数进行操作,会影响实际参数的值。
要按引用传递值,需要在调用和方法定义中都使用ref关键字:
static void Sqr(ref int x)
{
x = x * x;
}
static void Main()
{
int a = 3;
Sqr(ref a);
Console.WriteLine(a); // 输出的结果为:9
}
2.3输出传递
按输出传递参数和按引用传递参数有点类似,都会直接修改实际参数的值,不同之处在于,按输出传递参数是从方法中输出参数,而不是接受参数传入。按输出传递参数需要使用out关键字
static void GetValues(out int x, out int y)
{
x = 5;
y = 42;
}
static void Main(string[] args)
{
int a, b;
GetValues(out a, out b);
//此时,a的值为5,b的值为42
}
3:
ref in out 都属于引用传递 都会直接操作变量(实参)的值
ref 有进有出(入参、出参) out只出不进(不需要入参) in在委托、泛型接口中使用(供方法调用 不能改变变量的值 )