ref和out关键字,其主要作用,就是允许方法改变值类型的实参值或者允许方法返回多个值。
他可以以引用的方式传递任何类型的值,这样做将允许方法改变调用过程中使用的实参值。
首先我们来讲一下,通过ref关键字改变实参的值,直接看案例
class Program
{
static void Main(string[] args)
{
int a = 10;
Retest r = new Retest();
Console.WriteLine("a未调用之前的值:"+a);
r.Sqr(ref a);
Console.WriteLine("a调用之后的值:" + a);
}
}
class Retest
{
public void Sqr(ref int i)
{
i = i * i;
}
}
结果:a未调用之前的值:10
a调用之后的值:100
从结果我们可以看出来,a的值改变了,我们知道 值类型的值形参改变,不会改变实参,但是加了ref关键字后是可以改变实参值得。
必须注意得一点是:
通过ref传递得实参再调用之前必须先赋值,原因是接收这种实参得方法基于形参指向一个有效得假设,因此,用ref关键字时候,不能用方法给实参赋初始值。
接下来说一下out关键字。
out类似ref关键字,但out只是把值传出方法,再调用前,不用给out变量赋初始值,该方法给他赋初始值,而且,再方法内部out被认为未被赋值得,因此再方法结束后,必须给out参数赋值。
下面看下out关键字使用方法案例
static void Main(string[] args)
{
double f;
double i;
i = 10.125;
Retest r = new Retest();
int z= r.Getpares(i,out f);
Console.WriteLine("整数部分"+z);
Console.WriteLine("小数部分"+f);
}
}
class Retest
{
public int Getpares(double n ,out double fac )
{
int whole;
whole = (int)n;
fac = n - whole;
return whole;
}
}
结果:整数部分10
小数部分0.125
另外这2个关键字也能对引用类型数据进行使用,这里就不写具体案例了,方法和值类型一样使用。