1.ref参数:在方法内为变量重新赋值之后,方法结束依然有效
private static void refDemo()
{
int n1 = 1;
int n2 = 2;
//在方法内为变量重新赋值之后,方法结束依然有效
//refParaDemo(ref n1, ref n2);
refParaDemo2(n1, n2); //方法结束,值不改变
Console.WriteLine("n1:" + n1 + "\r\n" + "n2:" + n2);
Console.ReadLine();
}
public static void refParaDemo2(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
//ref参数的测试:
#region 高级参数ref用法
public static void refParaDemo(ref int a, ref int b)
{
//ref参数,用于将方法内的变量改变后带出方法外
int temp;
temp = a;
a = b;
b = temp;
}
#endregion
2.out参数:为变量重新赋值并返回(跟上面的区别就是不需要变量先初始化)
public static void testOutPara( out string msg1)
{
msg1 = "直接测试out参数";
}
//测试方法:
string msg1 = "zhende";
testOutPara(out msg1);
Console.WriteLine(msg1);
总结:两个参数用法效果都是一样的,区别在于
ref要求参数在使用之前要显式初始化,out要在方法内部初始化;
首先:两者都是按地址传递的,使用后都将改变原来参数的数值。
其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。ref是有进有出,out是只出不进。