C#中ref and out的说明
ef必须先初始化,因为是引用,所以必须先“有”,才能引用,如果不先初始化,调用的时候就取不到值会报错,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用,但是在方法内部一定要记得为其赋值,不然返回个空的东西,有什么用?根本就没有意义了。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
static void Main(string[] args)
{
int i1 = 1;
DotIt(i1);
Console.WriteLine(i1);
int i1 = 10;
int i2 = 20;
//Swap(i1, i2);
Console.WriteLine("i1={0},i2={1}", i1, i2); //返回的结果依旧是10,20,因为Swap(i1, i2)方法处理的是变量i1,i2的拷贝或者说是副本,变量i1,i2原先的值并没有因此而改变。
//用ref之前必须给变量赋值
Swap(ref i1, ref i2);//传递引用。给ref传递参数的时候也要加上ref
Console.WriteLine("i1={0},i2={1}", i1, i2);
bool b= false;//不需要为out赋值
int i = Parse(Console.ReadLine(), out b);
if (b)
{
Console.WriteLine("成功,i={0}", i);
}
else
{
Console.WriteLine("错误");
}
Console.ReadKey();
}
//int i传进来的的时候是复制了一份传进来,折腾的是复制品
static void DotIt(int i)
{
Console.WriteLine(i);
i++;
Console.WriteLine(i);
}
static void Swap(ref int i1, ref int i2)//reference→ref
{
//标记为ref就是要求调用者传递变量的引用
int temp = i1;
i1 = i2;
i2 = temp;
}
static void Swap(int i1, int i2)
{
int temp = i1;
i1 = i2;
i2 = temp;
}
static int Parse(string s,out bool success)
{
//Console.WriteLine(success); //这样会报错,因为success没有为其赋值
if(s=="一")
{
success = true;
return 1;
}
else if(s=="二")
{
success = true;
return 2;
}
else
{
success = false;
return -1;
}
}