在c#中,默认的参数传递是对值的拷贝,在方法中对参数的修改是不会影响到参数变量的原始值的.
先看代码:
class Program
{
private static int age = 50;
static void Main(string[] args)
{
add(age);
Console.WriteLine(age);//输出是50 ,而不是51
}
public static void add(int i)
{
i++;
}
}
使用ref: 注意参数必须要初始化,未初始化会报错.
class Program
{
static void Main(string[] args)
{
int age = 50;
add(ref age);
Console.WriteLine(age);//此时输出51
}
public static void add(ref int i)
{
i++;
}
}
使用out ,由于ref需要参数必须赋值,有时候我们希望在方法中赋值,则可以使用out
class Program
{
static void Main(string[] args)
{
int age;
add(out age);
Console.WriteLine(age);//此时输出51
}
public static void add(out int i)
{
//i++; //直接i++会报错,因为i还没有赋值.
i = 50;
i++;
}
}