用这两个修饰符修饰的参数,在函数内部对其进行修改会影响到外面的使用。普通参数不会。
public static void f0(int a)
{
a = 4;
}
public static void f1(out int a)
{
a = 5;
}
public static void f2(ref int a)
{
a = 6;
}
static void Main(string[] args)
{
int a = 3;
Program.f0(a);
Console.WriteLine(a);
Program.f1(out a);
Console.WriteLine(a);
Program.f2(ref a);
Console.WriteLine(a);
Console.ReadKey();
}
输出的值分别是3,5,6 .
都能像指针一样往回带数据
相同点就是都是按地址传递,在方法中改变值后都会影响到调用方
声明变量 A :
那么 传递的都是 A 本身的地址;而不是 A 保存的值的地址(当变量 A 是引用类型时)。
都是函数需要多个返回值的时候才运用的,两者在编译的时候原理是一样的
翻译成IL后是一样的,也就说,本质是一样的